簡體   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