根据日期索引

时间:2017-10-21 02:24:20

标签: python pandas

我想要一个包含 df1 值的数据框 df2 。 两个数据框都有一个日期索引。 两个数据框都包含相同的列。我只想更新df2的列,如果df2的索引存在于df1中。

df1

Symbol          K1     K2       K3   
Date                                      
2011-01-10     0.0     0.0     0.0    
2011-01-13 -1500.0     0.0  4000.0    
2011-01-26     0.0  1000.0     0.0  

DF2

                K1     K2       K3   

2011-01-10     0.0     0.0     0.0
2011-01-11     0.0     0.0     0.0      
2011-01-26     0.0     0.0     0.0   

期望输出

                K1     K2       K3     

2011-01-10     0.0     0.0     0.0    
2011-01-11     0.0     0.0     0.0   
2011-01-26     0.0  1000.0     0.0  

我试过了;

df2 = df2.join(df1, on=df1.index, how='left')

但是收到了这个错误;

  

引发KeyError('%s不在索引'%objarr [mask]中)KeyError:   "索引([u' 2011-01-10',u' 2011-01-13',u' 2011-01-26',u' 2011-02-02',\ n

任何帮助都非常受欢迎。

由于

2 个答案:

答案 0 :(得分:1)

找到索引上的公共交集并使用combine_first

df = df.loc[df.index.intersection(df2.index)].combine_first(df2)

print(df)
Symbol       K1      K2   K3
2011-01-10  0.0     0.0  0.0
2011-01-11  0.0     0.0  0.0
2011-01-26  0.0  1000.0  0.0

<强>详情

idx = df.index.intersection(df2.index)
print(idx)
Index(['2011-01-10', '2011-01-26'], dtype='object')

print(df.loc[idx])
Symbol       K1      K2   K3
2011-01-10  0.0     0.0  0.0
2011-01-26  0.0  1000.0  0.0

答案 1 :(得分:1)

您可以尝试合并索引:

df3 =df1.merge(df2, left_index=True, right_index=True, suffixes=("","_"), how='right')
df3= df3.drop(['K1_', 'K2_', 'K3_'], axis=1).fillna(0)