执行pandas.DataFrame.groupby()。sum()时保留非数字列

Aar*_*ang 6 python pandas

在执行pandas.DataFrame.groupby()。sum()时,可以保留非数字列(第一个出现的值)吗?

例如,我有一个这样的DataFrame:

df = pd.DataFrame({'A' : ['aa1', 'aa2', 'aa1', 'aa2'],'B' : ['bb1', 'bbb1', 'bb2', 'bbb2'],'C' : ['cc1', 'ccc2', 'ccc3', 'ccc4'],'D' : [1, 2, 3, 4],'E' : [1, 2, 3, 4]})
>>> df
     A     B     C  D  E
0  aa1   bb1   cc1  1  1
1  aa2  bbb1  ccc2  2  2
2  aa1   bb2  ccc3  3  3
3  aa2  bbb2  ccc4  4  4
>>> df.groupby(["A"]).sum()
     D  E
A        
aa1  4  4
aa2  6  6
Run Code Online (Sandbox Code Playgroud)

以下是我想要获得的结果:

     B    C    D  E
A        
aa1  bb1  cc1  4  4
aa2  bbb1 ccc2 6  6
Run Code Online (Sandbox Code Playgroud)

请注意,列BC 的值是每个组键的第一个关联的B值和C值。

小智 5

只需使用“第一”:

df.groupby(["A"]).agg({'B': 'first',
                       'C': 'first',
                       'D': sum,
                       'E': sum})
Run Code Online (Sandbox Code Playgroud)


ily*_*nam 4

对于 groupby-sum 数据框中的每个键,在原始数据框中查找键并将列的关联值放入B新列中。

#groupby and sum over columns C and D
df_1 = df.groupby(['A']).sum()
Run Code Online (Sandbox Code Playgroud)

查找 B 列中与 groupby 键关联的第一个值

groupby keys
col_b = []
#iterate through keys and find the the first value in df['B'] with that key in column A
for i in df_1.index:
    col_b.append(df['B'][df['A'] == i].iloc[0])

#insert list of values into new dataframe
df_1.insert(0, 'B', col_b)
>>>df_1
      B  D  E
A           
aa1 bb1  4  4
aa2 bbb1 6  6
Run Code Online (Sandbox Code Playgroud)