繁体   English   中英

如何通过将python中的目标列的多列与另一数据帧中的一列进行匹配来更新数据框中的目标列的某些值?

[英]How do I update some values of my target column in a dataframe by matching its multiple columns with one column in another dataframe in python?

我有两个熊猫数据框:

  • df1
  • df2

df1看起来像这样:

a     f1     f2     f3     target
1     aa     bb     cc     NaN
2     xx     yy     zz     NaN
more rows....

df2看起来像这样:

b     f1     target
3     bb     450
4     xx     220
more rows....

df1的期望输出是这样的:

a     f1     f2     f3     target
1     aa     bb     cc     450
2     xx     yy     zz     220
more rows....

这是我的问题:

如何通过将df2["f1"]df1["f1"] df1["f2"] df1["f3"]匹配,用df2["target"]的值更新df1["target"] df1["f3"]

合并和更新功能对我不起作用,因为我需要匹配多个列。 我看到的其他解决方案也适用于匹配所有多列,而我的数据并非如此。 (我只需要将一列与任何多列匹配。)

谢谢。

一种方法是创建字典,并在可能的情况下将其应用于第一列,在可能的情况下将其应用于第二列等。

d = dict(zip(df2.f1.values,df2.target.values))
df1.target = df1.apply(lambda r: d.get(r['f1'],d.get(r['f2'],d.get(r['f3']))), axis=1)

考虑迭代合并到合并为原始数据的附加数据框中:

# PAIRWISE MERGE FIELDS
merge_cols = [[i, 'f1'] for i in list(df1.columns[1:len(df1.columns)-1])]
# LIST OF INNER JOIN MERGES
dfs = [pd.merge(df1, df2, left_on=m[0], right_on=m[1], how='inner') for m in merge_cols]

# APPEND DFS
stackdf = pd.concat(dfs)[['a','target_y']]
finaldf = stackdf.merge(df1, on='a')\
                 .assign(target=stackdf['target_y'].values)\
                 .drop(['target_y'], axis=1)

print(finaldf)
#    a  f1  f2  f3  target
# 0  2  xx  yy  zz     220
# 1  1  aa  bb  cc     450

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM