Fiz*_*izi 15 python group-by dataframe pandas
我有一个pandas数据帧如下.对于每个Id,我可以有多个Name和Sub-id.
Id NAME SUB_ID
276956 A 5933
276956 B 5934
276956 C 5935
287266 D 1589
Run Code Online (Sandbox Code Playgroud)
我想压缩数据框,使每个id只有一行,每个id下的所有名称和sub_id在该行上显示为单数集
Id NAME SUB_ID
276956 set(A,B,C) set(5933,5934,5935)
287266 set(D) set(1589)
Run Code Online (Sandbox Code Playgroud)
我尝试将id分组,然后聚合所有其他列
df.groupby('Id').agg(lambda x: set(x))
Run Code Online (Sandbox Code Playgroud)
但是在这样做时,结果数据帧没有Id列.当你执行groupby时,id将作为元组的第一个值返回,但我想当你聚合时会丢失.有没有办法获得我正在寻找的数据帧.这是groupby和aggregate而不会丢失已分组的列.
Bou*_*oud 20
如果您不希望groupby作为索引,则有一个参数可以避免进一步重置:
df.groupby('Id', as_index=False).agg(lambda x: set(x))
Run Code Online (Sandbox Code Playgroud)
chr*_*ock 11
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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13622 次 |
| 最近记录: |