如何只添加常见的索引pandas数据框?

时间:2018-02-02 16:38:04

标签: python-2.7 pandas

假设我有两个数据框。如果有一个共同的索引,我想添加两个值,否则取值。让我用一个例子来说明这个

import pandas as pd

In [118]: df1 = pd.DataFrame([1, 2, 3, 4], index=pd.date_range('2018-01-01', periods=4))

In [119]: df2 = pd.DataFrame(10*np.ones_like(df1.values[1:3]), index=df1.index[1:3])

In [120]: df1.add(df2)
Out[120]: 
               0
2018-01-01   NaN
2018-01-02  12.0
2018-01-03  13.0
2018-01-04   NaN

但是,我想得到

               0
2018-01-01   1.0
2018-01-02  12.0
2018-01-03  13.0
2018-01-04   4.0

我怎样才能做到这一点?此外,如果df2.index不是df1.index的正确子集,即使

,也是可能的
df2 = pd.DataFrame(10*np.ones_like(df1.values[1:3]), index=pd.DatetimeIndex([df1.index[1], pd.Timestamp('2019-01-01')]))

In [131]: df2
Out[131]: 
             0
2018-01-02  10
2019-01-01  10

In [132]: df1.add(df2)
Out[132]: 
               0
2018-01-01   NaN
2018-01-02  12.0
2018-01-03   NaN
2018-01-04   NaN
2019-01-01   NaN

但我想要的是

               0
2018-01-01   1.0
2018-01-02  12.0
2018-01-03   3.0
2018-01-04   4.0
2019-01-01  10.0

1 个答案:

答案 0 :(得分:2)

fillna

结合使用
df1.add(df2).fillna(df1)
Out[581]: 
               0
2018-01-01   1.0
2018-01-02  12.0
2018-01-03  13.0
2018-01-04   4.0

好的,

pd.concat([df1,df2]).sum(level=0)
Out[591]: 
             0
2018-01-01   1
2018-01-02  12
2018-01-03   3
2018-01-04   4
2019-01-01  10