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
的值设置col4
或col5
。
【讨论】:
以上是关于Pandas 根据匹配复制值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python pandas 根据条件将行值复制到另一列