2017-10-18 8 views
1

に私は簡単な初期データフレームがあります。PythonのPANDAS:再インデックスDataFrameGroupByオブジェクトデータフレームエラー

ID, ATTRIBUTE 
1, thing2 
1, thing3 
1, thing3 
2, thing7 
2, thing7 
2, thing2 
3, thing1 
3, thing2 

を私はATTRIBUTEのモードを取得する場所作成する簡単なGROUPBYオブジェクト(それはマルチモーダルである場合、私は電話を持っていますその結果 'multithing'):私はそれを再インデックスした後、結果を取得しようとしています

mode = lambda x: x.mode() if len(x) > 2 else 'multithing' 
df_grouped = df.groupby(['ID'], as_index=False)['ATTRIBUTE].agg(mode) 

は次のようになります。

ID, ATTRIBUTE 
1, thing3 
2, thing7 
3, multithing 

だから私は再び通常のデータフレームのようにそれを使用して、このようなことを行うことができます。

df_final.groupby('ATTRIBUTE')['ID'].count() 

答えて

2

IIUC:

In [203]: df.groupby('ID')['ATTRIBUTE'] \ 
      .agg(lambda x: x.mode()[0] if len(x.mode()) == 1 else 'multithing') 
Out[203]: 
ID 
1  thing3 
2  thing7 
3 multithing 
Name: ATTRIBUTE, dtype: object 

または

In [205]: df.groupby('ID', as_index=False)['ATTRIBUTE'] \ 
    ...: .agg(lambda x: x.mode()[0] if len(x.mode()) == 1 else 'multithing') 
Out[205]: 
    ID ATTRIBUTE 
0 1  thing3 
1 2  thing7 
2 3 multithing 
+0

第二には完璧です。私は以前ラムダ関数に何が間違っていたのかを見ています。 – Pylander

+0

あなたが気にしない最後の質問が1つありますか?この場合のモードラムダはATTRIBUTEのnp.nan値を無視しますか?私はそれが非ヌル値のモードを見つけることだけを望むでしょう。 – Pylander

関連する問題