【发布时间】:2022-11-27 13:04:35
【问题描述】:
您好我正在尝试将 df1 列 A 中的值替换为 df2 列 B 中的值,方法是将它们与 df2 列 A 进行匹配。基本上,如果 df1['a'] 中行 x 的字符串等于行 y 中的字符串df2['a'] 我想用 df2['b'] 替换 df1['a'] 的值。我已经尝试了几件事,但由于某种原因,这无法正常工作。我还想用 None 替换不在 df2['a'] 中的值。
我的示例数据是:
df1 = pd.DataFrame({'a': ['a','b','a','d','e','f','g', 'h', 'i'],
'b': ['alpha', 'alpha', 'alpha', 'beta', 'beta', 'charlie', 'charlie', "alpha", "beta"],
'c': ['elephant', "zebra",'elephant', "zebra",'elephant', "zebra",'elephant','elephant', "zebra"]})
df2 = pd.DataFrame({'a': ['a','b','c','d','e','f','g'],
'b': ['alpha', 'alpha', 'alpha', 'beta', 'beta', 'charlie', 'charlie'],
'c': ['elephant', "zebra",'elephant', "zebra",'elephant', "zebra",'elephant']})
df1['UID'] = df1['a']+ df1['b']+df1['c']
df2['UID'] = df2['a']+ df2['b']+df2['c']
df1['a'].loc[df1['UID'].isin(df2['UID'])] = df2['c']
animals = ['elephant','zebra']
df1.loc[~df1['a'].isin(animals), "a"] = "None"
这适用于我的样本数据,但不适用于我的实际数据集,因为它要大得多。关于如何做类似的事情的任何想法?
【问题讨论】:
-
你确定逻辑吗?
df1['a']只包含'a'、'b'等。df2也是如此。 “x 行的字符串”是什么意思?