python - Pandas groupby 在一个列上而不丢失其他列?
问题描述
我对 groupby 和 pandas 有疑问,一开始我有这张图表:
import pandas as pd
data = {'Code_Name':[1,2,3,4,1,2,3,4] ,'Name':['Tom', 'Nicko', 'Krish','Jack kr','Tom', 'Nick', 'Krishx', 'Jacks'],'Cat':['A', 'B','C','D','A', 'B','C','D'], 'T':[9, 7, 14, 12,4, 3, 12, 11]}
# Create DataFrame
df = pd.DataFrame(data)
df
i have this :
Code_Name Name Cat T
0 1 Tom A 9
1 2 Nick B 7
2 3 Krish C 14
3 4 Jack kr D 12
4 1 Tom A 4
5 2 Nick B 3
6 3 Krishx C 12
7 4 Jacks D 11
现在我和 groupby :
df.groupby(['Code_Name','Name','Cat'],as_index=False)['T'].sum()
i got this:
Code_Name Name Cat T
0 1 Tom A 13
1 2 Nick B 10
2 3 Krish C 14
3 3 Krishx C 12
4 4 Jack kr D 12
5 4 Jacks D 11
但对我来说,我需要这个结果:
Code_Name Name Cat T
0 1 Tom A 13
1 2 Nick B 10
2 3 Krish C 26
3 4 Jack D 23
我不在乎命名Code_name对我来说唯一重要的是总和 T谢谢
解决方案
如果您不关心其他变量,则只需按感兴趣的列分组:
gb = df.groupby(['Code_Name'],as_index=False)['T'].sum()
print(gb)
Code_Name T
0 1 13
1 2 10
2 3 26
3 4 23
现在要获取输出,您可以为每个组获取 Name 的最后一个值:
gb = df.groupby(['Code_Name'],as_index=False).agg({'Name': 'last', 'Cat': 'first', 'T': 'sum'})
print(gb)
0 1 Tom A 13
1 2 Nick B 10
2 3 Krishx C 26
3 4 Jacks D 23
推荐阅读
- typescript - 量角器使用setter填充几个元素
- postgresql - Postgresql 返回值减少余额
- android - Android Retrofit 获取空值
- c++ - sqlConnection->Open() 不起作用
- matlab - 如果图像是二进制边界图像,如何将白色像素转换为其他颜色?
- c# - 在 EF Core 2.1 中使用环境事务时是否需要手动关闭 DbConnection?
- javascript - 软件包版本更改时如何通知?
- javascript - 如何使用 *ngFor 和 *ngIf Angular 4 将数据传递给不同的模板
- android - 过滤 OneSignal 推送通知
- ios - GLKView 类的替代解决方案是什么?[在 iOS 12 中已弃用]