Pandas 根据匹配复制值

Posted

技术标签:

【中文标题】Pandas 根据匹配复制值【英文标题】:Pandas Copy value based on Match 【发布时间】:2021-01-02 23:33:23 【问题描述】:

在一个包含 5 列的 csv 文件中,我试图在 2 列之一中复制一个值,以防与该列相关的特定字符串匹配。

首先 csv 文件如下所示

# 'Test.csv'

col1    col2    col3    col4    col5
alex    str1    47  0   54
beth    str2    94  94  0
stan    str1    18  0   18
hank    str1    37  0   37
june    str1    84  0   84
mary    str2    34  34  0

简单地说,

如果'col2'的值为'str1',那么只有'col4'被'col3'的值填充, (要么) 如果 'col2' 的值为 'str2',则只有 'col5' 填充有 'col3' 的值。

似乎非常接近我的答案的代码在这个article 中,但我无法针对上面的数据修改它。

Copy value from one column based on the value of another column

【问题讨论】:

链接答案的解决方案是什么?解决方案有什么问题?它应该运作良好。 嗨@jezrael,它显示的答案是这样的:“df_copy.loc[df['D']=='Test', 'A'] = df['B']”,但我到目前为止能够做到这一点,“df.loc[df[“col2”]=='str1',“我没有遵循那个解决方案中的'A'......对不起,我是一个菜鸟...... 那么需要df_copy.loc[df_copy['col2']=='str1', 'col4'] = df_copy['col3'] df_copy.loc[df_copy['col2']=='str2', 'col5'] = df_copy['col3'] 吗? 非常感谢@jezrael,您能否将其作为答案,以便我可以将您的答案标记为解决方案...再次感谢您 【参考方案1】:

你可能需要两行代码:

df['col4'] = np.where(df.col2 == 'str1', df.col3, df.col4)
df['col5'] = np.where(df.col2 == 'str2', df.col3, df.col5)

【讨论】:

哦,谢谢@Rajesh Bhat ...这个解决方案效果很好..但我想我需要包含np库..我希望一种纯粹的pandas方式可以工作,因为其中有很多功能一次使用,并且想要内存效率...【参考方案2】:

用途:

df_copy.loc[df_copy['col2']=='str1', 'col4'] = df_copy['col3']    
df_copy.loc[df_copy['col2']=='str2', 'col5'] = df_copy['col3']

这意味着如果匹配条件然后通过列col3的值设置col4col5

【讨论】:

以上是关于Pandas 根据匹配复制值的主要内容,如果未能解决你的问题,请参考以下文章

pandas - 根据列值复制每行'n'次

使用 Python pandas 根据条件将行值复制到另一列

Pandas 根据非恒定值的第三列将值从一列复制到另一列

循环遍历 Pandas 数据帧并根据条件复制到新数据帧

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

两个值匹配pandas时的累计计数