如何基于Pandas数据框中的其他行添加聚合行

时间:2019-05-15 16:47:16

标签: pandas dataframe

我有一个与此类似的数据框:

index a b c d
    0 1 1 1 3
    1 1 1 2 1
    2 1 2 1 4
    3 1 2 2 1
    4 2 2 1 5
    5 2 2 2 9
    6 2 2 1 2
    7 2 3 2 6

我想添加c为0的新行,并将d替换为现有行d和{{1}的最大值a }相同:

b

我可以使用什么命令?谢谢!

2 个答案:

答案 0 :(得分:3)

似乎可以将sort_values链与drop_duplicatesappend一起使用

df.append(df.sort_values('d').drop_duplicates(['a','b'],keep='last').assign(c=0))
Out[77]: 
       a  b  c  d
index            
0      1  1  1  3
1      1  1  2  1
2      1  2  1  4
3      1  2  2  1
4      2  2  1  5
5      2  2  2  9
6      2  2  1  2
7      2  3  2  6
0      1  1  0  3
2      1  2  0  4
7      2  3  0  6
5      2  2  0  9

答案 1 :(得分:2)

我提出了使用groupbypd.concat的解决方案,如下所示:

pd.concat([df, df.groupby(['a', 'b'])['d'].max().reset_index().assign(c=0)], ignore_index=True)


Out[1668]:
    a  b  c  d
0   1  1  1  3
1   1  1  2  1
2   1  2  1  4
3   1  2  2  1
4   2  2  1  5
5   2  2  2  9
6   2  2  1  2
7   2  3  2  6
8   1  1  0  3
9   1  2  0  4
10  2  2  0  9
11  2  3  0  6