gpt4 book ai didi

python - 合并具有多个键列的数据框

转载 作者:行者123 更新时间:2023-12-05 03:27:44 24 4
gpt4 key购买 nike

我想合并这个数据框:

import pandas as pd
import numpy as np

df1 = pd.DataFrame([[1,10,100],[2,20,np.nan],[3,30,300]], columns=["A","B","C"])
df1
A B C
0 1 10 100
1 2 20 NaN
2 3 30 300

用这个:

df2 = pd.DataFrame([[1,422],[10,72],[2,278],[300,198]], columns=["ID","Value"])
df2
ID Value
0 1 422
1 10 72
2 2 278
3 300 198

获取输出:

df_output = pd.DataFrame([[1,10,100,422],[1,10,100,72],[2,20,200,278],[3,30,300,198]], columns=["A","B","C","Value"])
df_output
A B C Value
0 1 10 100 422
1 1 10 100 72
2 2 20 NaN 278
3 3 30 300 198

想法是,对于 df2,键列是“ID”,而对于 df1,我们有 3 个可能的键列 ["A","B","C"]。

请注意,为了简单起见,df2 中的数字被选择成这样,并且在实践中它们可以包括随机数。

如何执行这样的合并?谢谢!

最佳答案

IIUC,你需要双重合并/连接。

首先,melt df1 得到单个列,同时保留索引。然后 merge 得到匹配项。最后join到原来的DataFrame。

s = (df1
.reset_index().melt(id_vars='index')
.merge(df2, left_on='value', right_on='ID')
.set_index('index')['Value']
)

# index
# 0 422
# 1 278
# 0 72
# 2 198
# Name: Value, dtype: int64

df_output = df1.join(s)

输出:

   A   B      C  Value
0 1 10 100.0 422
0 1 10 100.0 72
1 2 20 NaN 278
2 3 30 300.0 198

stack + map 的替代方案:

s = df1.stack().droplevel(1).map(df2.set_index('ID')['Value']).dropna()
df_output = df1.join(s.rename('Value'))

关于python - 合并具有多个键列的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71411496/

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