[英]Compare two columns using pandas and update changed values and append missing values
[英]Compare two columns of data using pandas, if same values in rows, update
我有兩個使用pd.read_csv讀取的數據框。
數據1:
animal name
0 lion a
1 tiger b,c
2 tiger b,c
3 bear d,e
4 bear d,e
數據2:
0 lion w
1 tiger x,y
2 bear z
我想將名稱列的第一個值用逗號分隔(數據1)后,將動物列(數據1)與第一列(數據2)和插件第二列(數據2)進行比較。
這是我想要的結果。
animal name
0 lion a,w
1 tiger b,x,y,c
2 tiger b,x,y,c
3 bear d,z,e
4 bear d,z,e
我該怎么做?
感謝下面的輸入,我創建了這樣的代碼,效果很好。 實際上,我想在第一個字符串之后插入df2 name列。
import sys
import pandas as pd
df1 = pd.read_csv("df1.dat", delimiter = '\t')
df2 = pd.read_csv("df2.dat", delimiter = '\t')
df1 = df1.fillna('')
df2 = df2.fillna('')
df1['first'] = df1['name'].str.split(',').str[0]
df1['rest'] = df1['name'].str.split(',').str[1:].apply(','.join)
df1['name'] =df1.merge(df2, how='inner', on='animal')[['first', 'name_y', 'rest']].apply(','.join, 1)
df1.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
df2 = df1['name'].str.replace(',,',',')
df2 = df2.str.rstrip(',')
如果出現NaN,這將清除數據並刪除不需要的逗號。 例如,
df1:
animal name
lion a
tiger b,c
tiger b,c
bear d,f,g
bear d,f,g
df2:
animal name
lion
tiger x,y
bear
結果是:
0 a
1 b,x,y,c
2 b,x,y,c
3 d,f,g
4 d,f,g
感謝您的反饋!
應該這樣做:
data_merged = df1.merge(df2, how='inner', on='animal')
data_merged['name'] = data_merged.name_x+','+data_merged.name_y
data_merged.drop(['name_x','name_y'], axis=1, inplace=True)
data_merged
animal name
0 lion a,w
1 tiger b,c,x,y
2 tiger b,c,x,y
3 bear d,e,z
4 bear d,e,z
使用merge
與apply
:
df1['name'] = df1.merge(
df2, how='inner', on='animal'
)[['name_x', 'name_y']].apply(','.join, 1)
animal name
0 lion a,w
1 tiger b,c,x,y
2 tiger b,c,x,y
3 bear d,e,z
4 bear d,e,z
如果順序很重要,則可以使用自定義幫助函數:
def helper(x):
foo, bar = [x[i].split(',') for i in ['name_x', 'name_y']]
return ','.join(foo[:1] + bar + foo[1:])
df1.merge(df2, how='inner', on='animal')[['name_x', 'name_y']].apply(helper, 1)
0 a,w
1 b,x,y,c
2 b,x,y,c
3 d,z,e
4 d,z,e
dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.