混合比较两个数据帧中的多列,并使用python | pandas添加一个新的

2024-06-02 17:54:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有file1,有6列,如下所示:

proNum   proName   color      path    comNum    comName
1        apple     red        ewtt    43        namex
1        apple     red        lfor    27        namey
1        apple     red        bcms    276       namez
4        orange    yellow     owif    7         namea
4        orange    yellow     zxaq    19        nameb
8        burry     bink       lpoq    99        namec

file2,两列如下:

comName    color
nameb      red
namex      bink
nameb      black
namez      blue
namec      yellow
namey      red
namez      red
nameb      bink

我要找的是在file1中添加一列,结果是/from:check/go遍历file1comName的每个值,将它与file2中的comName逐一进行比较,如果找到相同的值,则取file2color的对应值,并与file1中的color进行比较,如果相同,则将color的值放入该新列并退出,然后检查comName的下一个值

如果color的值不相等,则继续在file2中进行,因为comName对其中一些值显示一个或多个值,如果在file2中检查finish并且在color中没有相等的值,则在新列中输入No/Nan

以下是输出:

proNum   proName   color      path    comNum    comName   New_color
1        apple     red        ewtt    43        namex     No
1        apple     red        lfor    27        namey     red
1        apple     red        bcms    276       namez     red
4        orange    yellow     owif    7         namea     No
4        orange    yellow     zxaq    19        nameb     No
8        burry     bink       lpoq    99        namec     No

这似乎很容易,但这些混音比较真的困惑我怎么做,所以任何帮助/想法将不胜感激


Tags: noappleredfile1file2colororangeyellow
3条回答

在comName和color列上的表上应用左联接应使leed达到所需的输出

file2['color_y']=['red','bink','black','blue','yellow','red','red','bink']file1.merge(file2, how='left', on=['comName','color'].fillna('No')

请尝试以下代码:

df2 = df2.drop_duplicates(['comName'], keep='last')
result = df.merge(df2, on='comName', how='left', suffixes=('', '_y'))
result['New_color'] = result.apply(lambda x: x.color if x.color == x.color_y else 'No', 1)
result = result.drop(['color_y'], 1)

dffile1df2file2

输出:

  proNum proName   color  path comNum comName New_color
0      1   apple     red  ewtt     43   namex        No
1      1   apple     red  lfor     27   namey       red
2      1   apple     red  bcms    276   namez       red
3      4  orange  yellow  owif      7   namea        No
4      4  orange  yellow  zxaq     19   nameb        No
5      8   burry    bink  lpoq     99   namec        No

您可以在这里使用合并,这样您只能在comNamecolor上完全匹配时分配New_color

df1.merge(df2.assign(New_color=df2.color), how='left').fillna('No')

输出

   proNum proName   color  path  comNum comName New_color
0       1   apple     red  ewtt      43   namex        No
1       1   apple     red  lfor      27   namey       red
2       1   apple     red  bcms     276   namez       red
3       4  orange  yellow  owif       7   namea        No
4       4  orange  yellow  zxaq      19   nameb        No
5       8   burry    bink  lpoq      99   namec        No

相关问题 更多 >