![](/img/trans.png)
[英]How do I merge data from one row to another by keeping some column values unchanged in Python DataFrame
[英]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看起来像这样:
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.