![](/img/trans.png)
[英]comparing values of 2 columns from same pandas dataframe & returning value of 3rd column based on comparison
[英]Comparing 2 pandas dataframe columns and creating new column based on if the values are same or not
我有兩個 df 列addr_num1
和addr_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
允許根據條件設置列值
熊貓文檔申請
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.