添加两个pandas数据帧

cs0*_*679 40 python pandas

我有两个dataframes,都是索引的timeseries.我需要将元素添加到一起以形成新元素dataframe,但前提是索引和列是相同的.如果该项目不存在于其中一个中dataframe,则应将其视为零.

我尝试过使用.add但不管索引和列是什么.也尝试了一个简单combined_data = dataframe1 + dataframe2但这给了一个NaN如果两个数据帧都没有该元素.

有什么建议?

Wes*_*ney 67

怎么样x.add(y, fill_value=0)

import pandas as pd

df1 = pd.DataFrame([(1,2),(3,4),(5,6)], columns=['a','b'])
Out: 
   a  b
0  1  2
1  3  4
2  5  6

df2 = pd.DataFrame([(100,200),(300,400),(500,600)], columns=['a','b'])
Out: 
     a    b
0  100  200
1  300  400
2  500  600

df_add = df1.add(df2, fill_value=0)
Out: 
     a    b
0  101  202
1  303  404
2  505  606
Run Code Online (Sandbox Code Playgroud)

  • 我最近发现,如果您首先创建两个数据框,然后使用 df.set_index('Column_A') 将它们的索引列设置为现有数据框列之一,则此方法不起作用 (3认同)

Bre*_*arn 9

如果我理解正确,你需要这样的东西:

(x.reindex_like(y).fillna(0) + y.fillna(0).fillna(0))
Run Code Online (Sandbox Code Playgroud)

这将给出两个数据帧的总和.如果一个值在一个数据帧而不是另一个数据帧中,则该位置的结果将是该现有值(在X中查看B0,在Y中查看B0并查看最终输出).如果两个数据帧中都缺少一个值,那么该位置的结果将为零(在X中查看B1,在Y中查看B1并查看最终输出).

>>> x
   A   B   C
0  1   2 NaN
1  3 NaN   4
>>> y
    A   B   C
0   8 NaN  88
1   2 NaN   5
2  10  11  12
>>> (x.reindex_like(y).fillna(0) + y.fillna(0).fillna(0))
    A   B   C
0   9   2  88
1   5   0   9
2  10  11  12
Run Code Online (Sandbox Code Playgroud)