首页 > 解决方案 > 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谢谢

标签: pythonpandasdataframe

解决方案


如果您不关心其他变量,则只需按感兴趣的列分组:

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

推荐阅读