Pandas的框架添加新的列和更新的基础上字典键使用np,其中

afdcj2ne  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(107)

我想在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
9rnv2umw

9rnv2umw1#

让我们扁平化字典以创建键值对的替换字典,然后在所需列上使用replace方法来替换值。

dct = {('Y', 'y', 'yes', 'yeah', 'YES', 'Yeah'): 'Yes',
       ('N', 'n', 'no', 'nah', 'NO', 'NAH', 'No Data'): 'No'}

repl = {i: v for k, v in dct.items() for i in k}
df_update[column_name] = df_update[clone_col].replace(repl)
0     No
1    Yes
2     No
3    Yes

相关问题