[英]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.