2017-10-18 58 views
1

我有一個簡單的初始數據框:Python的大熊貓:重新編制DataFrameGroupBy對象到數據幀錯誤

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

我有一個簡單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

其次是完美的。我看到我之前做過的lambda函數做錯了。 – Pylander

+0

最後一個問題,如果你不介意?在這種情況下,模式lambda是否忽略ATTRIBUTE的np.nan值?我希望它只能找到非空值的模式。 – Pylander