![](/img/trans.png)
[英]pandas dataframe groupby without losing the column which was grouped
[英]pandas: groupby and aggregate without losing the column which was grouped
我有一個熊貓數據框如下。 對於每個ID,我可以有多個名稱和子ID。
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)
我嘗試對ID進行分組,然后匯總所有其他列
df.groupby('Id').agg(lambda x: set(x))
但是這樣做的結果是數據框沒有Id列。 當您進行groupby時,id作為元組的第一個值返回,但是我猜您聚合時會丟失。 有沒有一種方法可以獲取我要尋找的數據框。 那就是分組和聚集而不丟失被分組的列。
如果您不希望groupby作為索引,可以使用一個參數來避免進一步重置:
df.groupby('Id', as_index=False).agg(lambda x: set(x))
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.