我有两个熊猫数据框,它们都由重叠的日期索引,分别称为df1和df2。

df1 = pd.DataFrame(np.random.randn(5,4), index=pd.date_range('01/02/2014',periods=5,freq='D'), columns=['a','b','c', 'd'] )
df2 = pd.DataFrame({0 : [a,b,c,d], 1 : [b,c,b,a], 2 : [c,d,a,b], 3 : [d,a,d,c]}index=pd.date_range('01/03/2014',periods=4,freq='D'))
df1
                   a         b         c         d
2014-01-02  1.248568 -1.844952 -0.275825 -0.496379
2014-01-03  2.450789  0.864446 -0.163374 -0.437771
2014-01-04  0.223496  0.877333  1.580202  0.749173
2014-01-05  0.285521 -1.289847  0.273195 -0.747948
2014-01-06 -0.113029 -1.785885  0.078580 -1.156271
df2
            0  1  2  3
2014-01-03  a  b  c  d
2014-01-04  b  c  d  a
2014-01-05  c  b  a  d
2014-01-06  d  a  b  c


df1的列和df2的值都是商品的不同名称。

我想创建一个新的数据帧df3,以使df3与df2具有相同的索引,并且df3的值等于df1中df2值列的值。

df3
                   0         1         2         3
2014-01-03  2.450789  0.864446 -0.163374 -0.437771
2014-01-04  0.877333  1.580202  0.749173  0.223496
2014-01-05  0.285521 -1.289847  0.285521 -0.747948
2014-01-06 -1.156271 -0.113029 -1.785885  0.078580


我尝试了以下操作,但无法正常工作。

df2.apply(lambda x: df1.loc[x.index,str(x)])


有什么建议吗?

最佳答案

您可以将lookupapply一起使用

df2.apply(lambda x : df1.lookup(df2.index,x))
Out[469]:
                   0         1         2         3
2014-01-03  2.450789  0.864446 -0.163374 -0.437771
2014-01-04  0.877333  1.580202  0.749173  0.223496
2014-01-05  0.273195 -1.289847  0.285521 -0.747948
2014-01-06 -1.156271 -0.113029 -1.785885  0.078580

关于python - 用数据框中的值编制索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50071281/

10-12 16:39
查看更多