【问题标题】:Indexing with values in a dataframe使用数据框中的值进行索引
【发布时间】:2018-04-27 23:05:46
【问题描述】:

我有两个 pandas 数据框,它们都按重叠日期索引,分别称为 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)])

有什么建议吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以将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
    

    【讨论】:

    • df2.loc[:] = [df1.lookup(df2.index, df2[i]) for i in df2]。不确定哪个效果更好。
    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2018-03-12
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多