gpt4 book ai didi

python - 基于 2 个数据帧的 pandas 高效数据操作

转载 作者:行者123 更新时间:2023-12-05 09:30:49 24 4
gpt4 key购买 nike

这是我的带有 2 个数据帧的代码:

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.array([[1, 2, 3, 5, 2], [2, 2, 3, 5, 2], [3, 2, 3, 5, 2], [10, 2, 3, 5, 2]]),
columns=['ID', 'itemX_2', 'itemK_3', 'itemC_5', 'itemH_2'])
df2 = pd.DataFrame(np.array([[1,1,1, 2,2,2, 3,3,3, 10,10,10], [2,3,5, 2,3,5, 2,3,5, 2,3,5], [20,40,60, 80,100,200, 220,240,260, 500,505,520]]).T,
columns=['ID', 'Item_id', 'value_to_assign'])

基于df2我想修改df1

预期输出:

df_expected_output = pd.DataFrame(np.array([[1, 20, 40, 60, 20], [2, 80, 100, 200, 80], [3, 220, 240, 260, 220], [10, 500, 505, 520, 500]]),
columns=['ID', 'itemX_2', 'itemK_3', 'itemC_5', 'itemH_2'])

我已经通过遍历列和一些操作来完成它。在我的例子中,我在数据框中有更多的列和行,所以它很慢。有人知道如何以快速有效的方式做到这一点吗?谢谢

最佳答案

这是一种解决方案。 pivot df2 使其具有类似于 df1 的格式,然后通过匹配最后一个“_”之后的数字逐列替换。

df2_pivot = df2.pivot(index='ID', columns='Item_id', values='value_to_assign').rename_axis(None, axis=1)

df3 = df1.set_index('ID')
for c in df3:
df3[c] = df2_pivot[int(c.rsplit('_', 1)[-1])]

或者,对第二部分使用字典理解:

df3 = pd.DataFrame({c: df2_pivot[int(c.rsplit('_', 1)[-1])]
for c in df1.columns[1:]},
index=df1['ID']).reset_index()

输出:

>>> df3.reset_index()
ID itemX_2 itemK_3 itemC_5 itemH_2
0 1 20 40 60 20
1 2 80 100 200 80
2 3 220 240 260 220
3 10 500 505 520 500

关于python - 基于 2 个数据帧的 pandas 高效数据操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69302145/

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