两个不同大小的pandas数据帧的和列仅适用于某些行

2024-05-15 17:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个pandas数据帧,看起来像:

df1:
      n  column1
0   5.0      0.0
1   6.0      0.0
2   7.0      0.0
3   8.0      0.0
4   9.0      0.0
5  10.0      0.0

df2:
     n  column2
0  6.0      1.0
1  7.0      1.0
2  8.0      1.0

我只想对n相同的行求和column1和{}。期望输出如下:

^{pr2}$

请注意:

  • n的值可能因情况而异,因此我无法用零填充df2的列并执行经典求和。在
  • 最后不应修改n的值。因此,我希望避免一些变通方法,比如移动n值,使它们与行索引匹配。在
  • 到目前为止,我所做的尝试产生了如下结果:

          n  column1
    0   5.0      1.0
    1   6.0      1.0
    2   7.0      1.0
    3   8.0      NaN
    4   9.0      NaN
    5  10.0      NaN
    

    默认情况下,的sum是基于的索引执行的。

如何使用pandas的内置函数执行此操作?在


Tags: 数据函数pandas情况nan内置df1sum
2条回答

使用^{},但首先根据^{}n列创建索引:

df = (df2.set_index('n')['column2']
         .add(df1.set_index('n')['column1'], fill_value=0)
         .reset_index(name='column1'))
print (df)
      n  column1
0   5.0      0.0
1   6.0      1.0
2   7.0      1.0
3   8.0      1.0
4   9.0      0.0
5  10.0      0.0

另一个带有^{}和左连接的解决方案:

^{pr2}$

我通过合并数据帧并在pandas上求和来解决这个问题:

df = pd.merge(df1, df2, how='outer', on='n')

df['sum'] = df['column1'] + df['column2']

df[['n', 'sum']].fillna(0)

结果如下:

    n   sum
0   5.0 0.0
1   6.0 1.0
2   7.0 1.0 
3   8.0 1.0
4   9.0 0.0
5   10.0    0.0

相关问题 更多 >