Pandas将多个数据帧相加

use*_*531 13 python merge dataframe pandas

我有多个数据帧,每个数据帧都有一个多级索引和一个值列.我想在值列上添加所有数据帧.

df1 + df2

并非所有索引都在每个数据帧中都是完整的,因此我得到nan的行在所有数据帧中都不存在.

如何克服这一点并将任何数据帧中不存在的行视为值为0?

例如.我想得到

   val
a    2
b    4
c    3
d    3
Run Code Online (Sandbox Code Playgroud)

pd.DataFrame({'val':{'a': 1, 'b':2, 'c':3}}) + pd.DataFrame({'val':{'a': 1, 'b':2, 'd':3}})替代

   val
a    2
b    4
c  NaN
d  NaN
Run Code Online (Sandbox Code Playgroud)

piR*_*red 16

使用addfill_value=0参数的方法.

df1 = pd.DataFrame({'val':{'a': 1, 'b':2, 'c':3}})
df2 = pd.DataFrame({'val':{'a': 1, 'b':2, 'd':3}})

df1.add(df2, fill_value=0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


MultiIndex示例

idx1 = pd.MultiIndex.from_tuples([('a', 'A'), ('a', 'B'), ('b', 'A'), ('b', 'D')])
idx2 = pd.MultiIndex.from_tuples([('a', 'A'), ('a', 'C'), ('b', 'A'), ('b', 'C')])

np.random.seed([3,1415])
df1 = pd.DataFrame(np.random.randn(4, 1), idx1, ['val'])
df2 = pd.DataFrame(np.random.randn(4, 1), idx2, ['val'])

df1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

df2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

df1.add(df2, fill_value=0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 如果我有3个数据框,如何以一种非常简单的方式使用** add **? (2认同)
  • @schnaidar 很公平。我更新了我的答案。 (2认同)