为了账号安全,请及时绑定邮箱和手机立即绑定

使用 pandas.DataFrame.apply 查找值并将其替换为来自不同

使用 pandas.DataFrame.apply 查找值并将其替换为来自不同

慕容森 2022-07-12 09:47:26
我有两个具有相同日期时间索引的熊猫数据帧。第一个是J:            A     B     C01/01/10    100   400   20001/02/10    300   200   40001/03/10    200   100   300第二个是K:             100    200    300    40001/01/10     0.05  -0.42   0.61  -0.1201/02/10    -0.23   0.11   0.82   0.3401/03/10    -0.55   0.24  -0.01  -0.73我想使用 J 来引用 K 并创建第三个 DataFrame L,如下所示:             A      B      C01/01/10     0.05  -0.12  -0.4201/02/10     0.82   0.11   0.3401/03/10     0.24  -0.55  -0.01为此,我需要获取 J 中的每个值并在 K 中查找相应的值,其中列名是同一日期的值。我试着做:L = J.apply( lambda x: K.loc[ x.index, x ], axis='index'  )但得到:ValueError: If using all scalar values, you must pass an index理想情况下,我希望使用它,以便 J 中包含的任何 NaN 值将保持原样,并且不会在 K 中查找。我没有成功地尝试过这个:L = J.apply( lambda x: np.nan if np.isnan( x.astype( float ) ) else K.loc[ x.index, x ]  )
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

使用DataFrame.melt和DataFrame.stack来DataFrame.join映射新值,然后我们将 DataFrame 恢复为原始形状DataFrame.pivot:


#if neccesary

#K = K.rename(columns = int)

L = (J.reset_index()

      .melt('index')

      .join(K.stack().rename('new_values'),on = ['index','value'])

      .pivot(index = 'index',

             columns='variable',

             values = 'new_values')

      .rename_axis(columns = None,index = None)

    )

print(L)

或与DataFrame.lookup


L = J.reset_index().melt('index')

L['value'] = K.lookup(L['index'],L['value'])

L = L.pivot(*L).rename_axis(columns = None,index = None)

print(L)

输出


             A     B     C

01/01/10  0.05 -0.12 -0.42

01/02/10  0.82  0.11  0.34

01/03/10  0.24 -0.55 -0.01

我认为这apply可能是一个不错的选择,但我不确定,我建议你看看When should I want use apply in my code


查看完整回答
反对 回复 2022-07-12
?
largeQ

TA贡献2039条经验 获得超7个赞

用于DataFrame.apply基于DataFrame.lookup标签的索引。


# if needed, convert columns of df2 to integers

# K.columns = K.columns.astype(int)

L = J.apply(lambda x: K.lookup(x.index, x))

             A     B     C

01/01/10  0.05 -0.12 -0.42

01/02/10  0.82  0.11  0.34

01/03/10  0.24 -0.55 -0.01


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信