我有以下DataFrames:
索引是日期和标识
Value
Date Id
2017-01-01 1 1.4
2017-02-01 1 1.4
2017-03-01 1 1.4
2017-01-01 2 1.4
2017-01-02 2 1.4
2017-01-03 2 1.4
和包含Id(索引)的一般信息的第二个DatFrame:
V1 V2
Id
1 x y
2 y x
我想创建一个看起来像(带有索引日期和标识)的数据框:
Date Id Value V1 V2
2017-01-01 1 1.4 x y
2017-02-01 1 1.4 x y
2017-03-01 1 1.4 x y
2017-01-01 2 1.4 y x
2017-01-02 2 1.4 y x
2017-01-03 2 1.4 y x
我已经尝试使用pd.join(df1,df2,on =' Id')但是出现了一个关键错误。
答案 0 :(得分:1)
DF.join()
方法中的on
参数采用列名称(或)list
列名称,但您已提供索引级别将"Id"
命名为它。因此,它会抛出KeyError
,表示在查询要用于连接目的的列名时找不到此字符串。
相反,请不要将此指定为join
,默认情况下会推断索引的对齐,除非使用on
参数另行指定。
对于您的情况,考虑左join
索引的简单DF's
将产生正确的结果:
df1.join(df2).reset_index()
您想要指定要用于加入的特定级别名称的另一个替代方法可以通过使用DF.reindex()
方法来实现,如下所示:
df1.join(df2.reindex(index=df1.index, level='Id')).reset_index()
答案 1 :(得分:0)
我不知道我的方式是否是推荐的方式,但我确实有这个工作:
df1.reset_index(levels=['Date','Id'])
#This makes your index just columns in the dataframe
df2.reset_index....
df3=pd.merge(df1,df2,on=['Date','Id'])