熊猫对多个数据框求和
Posted
技术标签:
【中文标题】熊猫对多个数据框求和【英文标题】:Pandas sum multiple dataframes 【发布时间】:2016-11-23 03:50:15 【问题描述】:我有多个数据框,每个数据框都有一个多级索引和一个值列。我想将值列上的所有数据框相加。
df1 + df2
并非每个数据帧中的所有索引都是完整的,因此我在所有数据帧中都不存在的一行上得到nan
。
如何克服这个问题并将任何数据框中不存在的行视为值为 0?
例如。我想得到
val
a 2
b 4
c 3
d 3
来自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
【问题讨论】:
【参考方案1】:使用带有fill_value=0
参数的add
方法。
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)
val
a 2.0
b 4.0
c 3.0
d 3.0
多索引示例
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
val
a A -2.129724
B -1.268466
b A -1.970500
D -2.259055
df2
val
a A -0.349286
C -0.026955
b A 0.316236
C 0.348782
df1.add(df2, fill_value=0)
val
a A -2.479011
B -1.268466
C -0.026955
b A -1.654264
C 0.348782
D -2.259055
超过 2 个数据帧
from functools import reduce
df1 = pd.DataFrame('val':'a': 1, 'b':2, 'c':3)
df2 = pd.DataFrame('val':'a': 1, 'b':2, 'd':3)
df3 = pd.DataFrame('val':'e': 1, 'c':2, 'd':3)
df4 = pd.DataFrame('val':'f': 1, 'a':2, 'd':3)
df5 = pd.DataFrame('val':'g': 1, 'f':2, 'd':3)
reduce(lambda a, b: a.add(b, fill_value=0), [df1, df2, df3, df4, df5])
val
a 4.0
b 4.0
c 5.0
d 12.0
e 1.0
f 3.0
g 1.0
【讨论】:
非常简洁的答案!它也可以与多索引 DF 一起使用吗? 如果我有3个dataframe,如何以非常简单的方式使用add? 我给出的答案会与此不同。我建议你再问一个问题。这样每个人都可以看到它的好处。 @piRSquared 我认为如果您只是在这里写下您的答案,而不是添加两个关于如果只有另一个问题时您将如何回答的问题,那么它会对每个人都有最大的帮助。那么,你有没有在某个地方回答过? @schnaidar 很公平。我更新了我的答案。以上是关于熊猫对多个数据框求和的主要内容,如果未能解决你的问题,请参考以下文章