求和数据帧行,并将结果放入下一行



我有一个这样的数据帧:

col1    col2      col3    col4
0    A       A_1       8        4
1    A       A_2       2        7
2    A       A_3       5        5
3    A       A_sum
4    B       B_1       9        8
5    B       B_2       6        8
6    B       B_3       5        2
7    B       B_sum

我想对属于A或B的col3和col4中的行求和,并将和放在索引3和7中,然后得到这样的输出数据帧:

col1    col2      col3    col4
0    A       A_1       8        4
1    A       A_2       2        7
2    A       A_3       5        5
3    A       A_sum     15       16
4    B       B_1       9        8
5    B       B_2       6        8
6    B       B_3       5        2
7    B       B_sum     20       18

编辑时间:谢谢@andrej,它与上面的df完美配合,但在下面的这个中:

col1    col2      col3    col4
0    A       A_1       8        4
1    A       A_2       NaN      7
2    A       A_3       NaN      5
3    A       A_sum     NaN      NaN
4    B       B_1       9        8
5    B       B_2       6        8
6    B       B_3       5        NaN
7    B       B_sum     NaN      NaN

当我尝试你的解决方案@andrej时,它会给我这个输出:

col1    col2      col3    col4
0    A       A_1       8        4
1    A       A_2       8        7
2    A       A_3       8        5
3    A       A_sum     8        16
4    B       B_1       9        8
5    B       B_2       6        8
6    B       B_3       5        16
7    B       B_sum     20       16

有没有办法只得到索引3和7的和值?

尝试:

# if the empty values aren't NaNs already:
# df = df.replace("", np.nan) 
vals = df.groupby("col1").sum()
df = df.set_index("col1")
df.update(vals, overwrite=False)
print(df.reset_index())

打印:

col1   col2  col3  col4
0    A    A_1   8.0   4.0
1    A    A_2   2.0   7.0
2    A    A_3   5.0   5.0
3    A  A_sum  15.0  16.0
4    B    B_1   9.0   8.0
5    B    B_2   6.0   8.0
6    B    B_3   5.0   2.0
7    B  B_sum  20.0  18.0

编辑:

m = ~df.col2.str.contains("_sum")
df.loc[m] = df[m].fillna(0)
vals = df.groupby("col1").sum()
df = df.set_index("col1")
df.update(vals, overwrite=False)
print(df.reset_index())

打印:

col1   col2  col3  col4
0    A    A_1   8.0   4.0
1    A    A_2   0.0   7.0
2    A    A_3   0.0   5.0
3    A  A_sum   8.0  16.0
4    B    B_1   9.0   8.0
5    B    B_2   6.0   8.0
6    B    B_3   5.0   0.0
7    B  B_sum  20.0  16.0

最新更新