繁体   English   中英

比较 2 个 pandas 数据框列并根据值是否相同创建新列

[英]Comparing 2 pandas dataframe columns and creating new column based on if the values are same or not

我有两个 df 列addr_num1addr_num2如下所示:

addr_num1  addr_num2
   10          10
   20          20
   33          35
   40          40
   50          53

我想创建一个新列,如果两个值相同,我将使用其中一个。 如果没有,我将它们组合如下:

addr_num3
   10
   20
  33-35
   40
  50-53

我怎样才能做到这一点? 请指教。

使用条件语句的简单方法:

s1 = df['addr_num1'].astype(str)
s2 = df['addr_num2'].astype(str)

import numpy as np
df['addr_num3'] = np.where(s1==s2, s1, s1+'-'+s2)

使用重塑的替代方法:

df['addr_num3'] = (df[['addr_num1', 'addr_num2']]
 .astype(str)
 .reset_index()
 .melt(id_vars='index')
 .drop_duplicates(['index', 'value'])
 .groupby('index')['value'].agg('-'.join)
)

输出:

   addr_num1  addr_num2 addr_num3
0         10         10        10
1         20         20        20
2         33         35     33-35
3         40         40        40
4         50         53     50-53

您可以使用两个步骤

将所有值设置为您的第一列和第二列,用str分隔- ,这将用于非“匹配”

使用.loc过滤匹配项并将值设置为第一列(作为字符串以保持一致性)

df['addr_num3'] = df['addr_num1'].apply(str)+'-'+df['addr_num2'].apply(str)
df.loc[df['addr_num1']==df['addr_num2'],'addr_num3']=df['addr_num1'].apply(str)

loc允许根据条件设置列值

本地的 Pandas 文档

熊猫文档申请

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM