2017-04-20 20 views
0

私は以下のようなデータフレームを持っています。 次のようなカウントを取得してデータプロファイルを構築したいと考えています。Python Pandas Dataframe複数の列の値を使用してフィルタリングした後の行の数を取得します

1)ユニーク学生のID(生徒数)のカウント 私の答えは動作します:ユニークな学生のID 国際= N以外の留学生の(数)の

print(len(df['Student ID'].unique())) 

2)のカウント

私の答えは動作しません:print(len(df1.loc[(df1['Student ID'].unique())['International Student'] == N]))

3)国際= Nユニークな学生IDの数& ATARがATARが

0-50の間にいくつかの他の質問であるユニークな学生IDの(ATARを持っている非留学生の数)

4)のカウントnullではない:

5)どうすればいいですか新しいデータフレームを作成するユニークな学生IDと他のすべての列を持つ学生IDごとにすべての行を削除してから

2〜5番の質問には非常に感謝します。新しいdf1の見返り1列のboolean indexinglocSeries)との主ニードSeries.nunique

Student_ID   International  marks  ATAR 

119     N     60   80 
119     N     70   80 
119     N     75   80 
129     Y     78   75 
129     Y     60   75 
155     Y     85   
155     Y     80   

答えて

1
df = pd.DataFrame({ 
'International': ['N', 'N', 'N', 'Y', 'Y', 'Y', 'Y'], 
'marks': [60, 70, 75, 78, 60, 85, 80], 
'Student_ID': [119, 119, 130, 140, 155, 155, 155], 
'ATAR': [80.0, 20.0, np.nan, 50.0, 15.0, np.nan, np.nan] 
}).reindex_axis(['Student_ID','International','marks','ATAR'], axis=1) 

print (df) 
    Student_ID International marks ATAR 
0   119    N  60 80.0 
1   119    N  70 20.0 
2   130    N  75 NaN 
3   140    Y  78 50.0 
4   155    Y  60 15.0 
5   155    Y  85 NaN 
6   155    Y  80 NaN 

、最後drop_duplicates

print(df['Student_ID'].nunique()) 
4 
print(df.loc[df['International'] == 'N', 'Student_ID'].nunique()) 
2 
print(df.loc[(df['International'] == 'N') & (df['ATAR'].notnull()), 'Student_ID'].nunique()) 
1 
print(df.loc[df['ATAR'].between(0,50), 'Student_ID'].nunique()) 
3 

df1 = df.drop_duplicates('Student_ID') 
print (df1) 
    Student_ID International marks ATAR 
0   119    N  60 80.0 
2   130    N  75 NaN 
3   140    Y  78 50.0 
4   155    Y  60 15.0 
+0

問題ありませんが、それは私の大学とshorcutsがBA STUです。 ) – jezrael

+0

oh wow lol ... done –

+0

:私にとっては、BA(ビジネスアナリティクス)の学生を意味します。ありがとう。ああも –

関連する問題