[英]How can I calculate the sum of two `pandas.DataFrame` based on `pandas.DataFrame.index`?
import pandas as pd
data = [[1, 2], [3, 4]]
index1 = ['I1', 'I2']
index2 = ['I1', 'I3']
columns = ['C1', 'C2']
df1 = pd.DataFrame(data, index=index1, columns=columns)
df2 = pd.DataFrame(data, index=index2, columns=columns)
print(df1)
# C1 C2
#I1 1 2
#I2 3 4
print(df2)
# C1 C2
#I1 1 2
#I3 3 4
print(...) # Calculate somehow
## !!!!!Expected Result!!!!!
# C1 C2
#I1 2 4
#I2 3 4
#I3 3 4
预期结果是 dataframe,其值如下所示。
df1
和df2
都有一个名为'I1'
的行。df1.loc['I2']
的值,因为df2
没有这个索引。df2.loc['I3']
的值,因为df1
没有这个索引。print(df1.add(df2, axis='index'))
# C1 C2
#I1 2.0 4.0
#I2 NaN NaN
#I3 NaN NaN
print(pd.concat([df1, df2]))
# C1 C2
#I1 1 2
#I2 3 4
#I1 1 2
#I3 3 4
print(df1 + df2.values)
# C1 C2
#I1 2 4
#I2 6 8
你能帮我得到预期的结果吗?
尝试使用DataFrame.add()
df = df1.add(df2, fill_value=0)
dataframe 与您的 output 匹配,但可能需要修复您可以使用的 dtypes
df["C1"] = df["C1"].astype(np.int64)
df["C2"] = df["C2"].astype(np.int64)
对于不与 numpy 一起使用,在代码中只使用int
而不是np.int64
有关此文档,请参阅Pandas 文档
尝试使用groupby
进行链式连接
out = pd.concat([df1, df2]).groupby(level=0).sum()
Out[161]:
C1 C2
I1 2 4
I2 3 4
I3 3 4
您正在寻找的是 df.combine 方法此方法将您的两个数据帧与给定的 function 组合在一起,就像文档显示
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.combine.html
所以基本上你需要做的是以下,
func = lambda s1,s2: s1+s2
df3 = df1.combine(df2,func,fill_value=0)
print(df3)
这为您提供了比添加更多的灵活性
这是使用 combine_first 的一种方法,依次
df3=df3.combine_first(df1).combine_first(df2)
df3
C1 C2
I1 2.0 4.0
I2 3.0 4.0
I3 3.0 4.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.