我想在pd df中创建一个新列。我有一个字典,输入了一个键元组,我想检查一个列,然后用dict中的值创建一个新的。
{('Y','y','yes','yeah','YES','Yeah'):'Yes',('N','n','no','nah','NO','NAH','No Data'):'No'}
我有这个代码工作,但因为我使用的是for循环,在第二次迭代中,它用clone_col值覆盖了新的col,所以我基本上恢复了第一次迭代的更改。一定有更好的with .apply,或.map和lambda函数,但我不确定。我尝试了apply和lambda,但无法让它工作。谢谢你的帮助。
for k, v in ast.literal_eval(sources).items():
df_update[column_name] = np.where(
df_update[clone_col].isin(k),
v,
df_update[clone_col],
)
应用尝试:
for k, v in ast.literal_eval(sources).items():
df_update[column_name] = df_update.apply(lambda x: v if x[clone_col] in k else x[clone_col], axis=1)
这和上面的w/ np循环做的是一样的。
对于df结果,因此如果每行具有以下内容:
n
Y
N
y
我最终得到了这个,bcz在迭代中为“否”,它覆盖了“是”记录:
No
Y
No
y
1条答案
按热度按时间9rnv2umw1#
让我们扁平化字典以创建键值对的替换字典,然后在所需列上使用
replace
方法来替换值。