gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:14 25 4
gpt4 key购买 nike

我有两个具有相同日期时间索引的 pandas DataFrame。

第一个是J:

            A     B     C
01/01/10 100 400 200
01/02/10 300 200 400
01/03/10 200 100 300

第二个是K:

             100    200    300    400
01/01/10 0.05 -0.42 0.61 -0.12
01/02/10 -0.23 0.11 0.82 0.34
01/03/10 -0.55 0.24 -0.01 -0.73

我想使用 J 引用 K 并创建第三个 DataFrame 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

为此,我需要获取 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 ]  )

最佳答案

使用DataFrame.meltDataFrame.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

关于python - 使用 pandas.DataFrame.apply 查找值并将其替换为来自不同 DataFrame 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com