2017-08-11 9 views
0

私は、単純なパンダのデータフレームを持っている:なぜpandasはgroupby文の行を削除して表示しますか?

 A  B 
0 test fast 
1 train slow 
2 test fast 
3 train slow 

今私は、カラムA ==テスト

df2.drop(df2[df2['A'] == 'test'].index, inplace=True) 

行を削除し、結果として得る:

 A  B 
1 train slow 
3 train slow 

今私が実行groupbyの声明:

df2.groupby('A').B.count() 

結果として得る:それは削除されたものの

A 
test  0 
train 2 

は、なぜ私はテストのための出力を得るのですか? これを避ける方法は?

あなたのケースのおかげで、 サイモン

+0

パンダが次のような行を生成する理由を理解できません。 "test 0" –

+1

https://pastebin.com/dMATTg1Bは正常に動作します。再確認してください。 – Zero

+1

あなたのコードを実行しましたが、あなたが望むように正しい答えが表示されます。 – ammy

答えて

1

は、Aのデータ型がcategoryで、以下を参照:

をカテゴリに変換Aの後に、私はあなた

df.A=df.A.astype('category') 
df1=df.drop(df[df['A'] == 'test'].index) 
df1.groupby('A').B.count() 

A 
test  0 
train 2 
Name: B, dtype: int64 

と同じ結果を得ましたあなたが望む出力を得るには、元のdf.Astringに変換してください:

df.A=df.A.astype('str') 
df1=df.drop(df[df['A'] == 'test'].index) 
df1.groupby('A').B.count() 

Out[201]: 
A 
train 2 
Name: B, dtype: int64 
+0

hmm、it興味深いことに、これはカテゴリにのみ発生します。しかし、この行動が欲しいのであれば、問題は残る。 –

+0

@ P.TillmannそれはOPが欲しいのか – Wen

関連する問題