我想要一个包含 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
任何帮助都非常受欢迎。
由于
答案 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)