熊猫groupby在一个专栏上不输其他专栏吗?

时间:2019-11-21 10:48:26

标签: python pandas dataframe

我对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


我不在乎名称代号对我来说仅是重要的,总和为T 谢谢

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

有2种方法-为避免丢失的每一列添加聚合功能-对于字符串列和诸如first,{的聚合词,last', '.joinsum {1}}用于数字列:

mean

或者,如果每个组重复某些值,例如此处df = df.groupby('Code_Name',as_index=False).agg({'Name':'first', 'Cat':'first', 'T':'sum'}) print (df) Code_Name Name Cat T 0 1 Tom A 13 1 2 Nicko B 10 2 3 Krish C 26 3 4 Jack kr D 23 的值,则将此列添加到Cat-仅在输出中更改顺序:

groupby

答案 2 :(得分:0)

也许您可以尝试:

    (df.groupby("Code_Name", as_index=False)
       .agg({"Name":"first", "Cat":"first", "T":"sum"}))

有关原始答案,请参见链接:https://datascience.stackexchange.com/questions/53405/pandas-dataframe-groupby-and-then-sum-multi-columns-sperately