簡體   English   中英

使用熊貓比較兩列數據,如果行中的值相同,則更新

[英]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

使用mergeapply

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM