2016-09-11 93 views
8

我有一個熊貓數據框如下。對於每個ID我可以有多個名稱和子標識。熊貓:groupby和聚合不丟失被分組的列

Id  NAME SUB_ID 
276956 A  5933 
276956 B  5934 
276956 C  5935 
287266 D  1589 

我想凝結數據幀,使得只有一個每個ID行和所有每個ID下的名稱和sub_ids出現在該行

Id  NAME   SUB_ID 
276956 set(A,B,C)  set(5933,5934,5935) 
287266 set(D)   set(1589) 

我試圖奇異集groupby id然後聚合到所有其他列上

df.groupby('Id').agg(lambda x: set(x)) 

但是這樣做後生成的數據框沒有Id列。當你做groupby時,id作爲元組的第一個值被返回,但是我猜你的聚合是丟失的。有沒有辦法獲得我正在尋找的數據框?這是爲了groupby和聚合而不會丟失被分組的列。

+1

被警告在Series和DataFrames中存儲非標量對象只有有限的支持,並可能導致意外的結果。 – DSM

回答

10

如果你不想GROUPBY作爲一個指標,有一種說法爲它避免進一步的復位:

df.groupby('Id', as_index=False).agg(lambda x: set(x)) 
+0

甚至更​​好。謝謝! – Fizi

6

groupby列成爲索引。你可以簡單地重置指數把它找回來:

In [4]: df.groupby('Id').agg(lambda x: set(x)).reset_index() 
Out[4]: 
     Id  NAME    SUB_ID 
0 276956 {A, C, B} {5933, 5934, 5935} 
1 287266  {D}    {1589} 
+0

銖。這很容易/謝謝:) – Fizi