一尘不染

将groupby操作的结果插入行到原始数据框中

python

例如,我有一个熊猫数据框,如下所示:

col_1   col_2   col_3  col_4
a       X        5      1
a       Y        3      2
a       Z        6      4
b       X        7      8
b       Y        4      3
b       Z        6      5

我想为col_1中的每个值添加col_3和col_4中的值(以及更多列),这些值与col_2中的X和Z对应,并使用这些值创建新行。因此输出如下:

col_1   col_2   col_3  col_4 
a       X        5      1
a       Y        3      2
a       Z        6      4
a       NEW      11     5
b       X        7      8
b       Y        4      3
b       Z        6      5
b       NEW      13     13

另外,col_1中可能会有更多需要相同处理的值,因此我无法明确引用“ a”和“
b”。我尝试使用groupby(’col_1’)和apply()的组合,但无法正常工作。我与下面的内容足够接近,但是我无法在col_2中将“
NEW”放置在col_1中并保留原始值(a或b等)。

df.append(df[(df['col_2'] == 'X') | (df['col_2'] == 'Z')].groupby('col_1').mean())

谢谢。


阅读 351

收藏
2021-01-20

共1个答案

一尘不染

如果可以保证X并且Z仅在组中出现一次,则可以使用groupbyandpd.concat操作:

new = df[df.col_2.isin(['X', 'Z'])]\
      .groupby(['col_1'], as_index=False).sum()\
      .assign(col_2='NEW')

df = pd.concat([df, new]).sort_values('col_1')

df
  col_1 col_2  col_3  col_4
0     a     X      5      1
1     a     Y      3      2
2     a     Z      6      4
0     a   NEW     11      5
3     b     X      7      8
4     b     Y      4      3
5     b     Z      6      5
1     b   NEW     13     13
2021-01-20