Python 如何使用复杂条件比较两个数据帧中的两列

Python 如何使用复杂条件比较两个数据帧中的两列,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个数据帧: import numpy as np a = [['A',np.nan,2,'x|x|x|y'],['B','a|b',56,'b|c'],['C','c|e|e',65,'f|g'],['D','h',98,'j'],['E','g',98,'k|h'],['F','a|a|a|a|a|b',98,np.nan],['G','w',98,'p'],['H','s',98,'t|u']] df1 = pd.DataFrame(a, columns=['1', '2','3'

假设我有一个数据帧:

import numpy as np
a = [['A',np.nan,2,'x|x|x|y'],['B','a|b',56,'b|c'],['C','c|e|e',65,'f|g'],['D','h',98,'j'],['E','g',98,'k|h'],['F','a|a|a|a|a|b',98,np.nan],['G','w',98,'p'],['H','s',98,'t|u']]
df1 = pd.DataFrame(a, columns=['1', '2','3','4'])
df1
    1   2   3   4
0   A   NaN 2   x|x|x|y
1   B   a|b 56  b|c
2   C   c|e|e   65  f|g
3   D   h   98  j
4   E   g   98  k|h
5   F   a|a|a|a|a|b 98  NaN
6   G   w   98  p
7   H   s   98  t|u
a = [['x'],['b'],['h'],['v']]
df2 = pd.DataFrame(a, columns=['1'])
df2

    1
0   x
1   b
2   h
3   v
和另一个数据帧:

import numpy as np
a = [['A',np.nan,2,'x|x|x|y'],['B','a|b',56,'b|c'],['C','c|e|e',65,'f|g'],['D','h',98,'j'],['E','g',98,'k|h'],['F','a|a|a|a|a|b',98,np.nan],['G','w',98,'p'],['H','s',98,'t|u']]
df1 = pd.DataFrame(a, columns=['1', '2','3','4'])
df1
    1   2   3   4
0   A   NaN 2   x|x|x|y
1   B   a|b 56  b|c
2   C   c|e|e   65  f|g
3   D   h   98  j
4   E   g   98  k|h
5   F   a|a|a|a|a|b 98  NaN
6   G   w   98  p
7   H   s   98  t|u
a = [['x'],['b'],['h'],['v']]
df2 = pd.DataFrame(a, columns=['1'])
df2

    1
0   x
1   b
2   h
3   v
我想将df2中的第1列与df1中的第2列和第4列(用“|”)进行比较,如果该值与第2列或第4列中的一个或两个(在分割后)匹配,我想只提取另一个数据帧中的df1行,该数据帧中添加了一个列,该列的df2值将与df1的第2列或第4列匹配。 例如,结果如下所示:

    1   2   3   4   5
0   A   NaN 2   x|x|x|y x
1   B   a|b 56  b|c b
2   F   a|a|a|a|a|b 98  NaN b
3   D   h   98  j   h
4   E   g   98  k|h h

解决方案是将两列的值连接到中的
系列
,然后按拆分,使用筛选值,然后将值连接在一起而不使用
NaN
s,最后一个筛选列不使用空字符串:

df11 = df1[['2','4']].fillna('').agg('|'.join, 1).str.split('|', expand=True)
df1['5'] = (df11.where(df11.isin(df2['1'].tolist()))
                .apply(lambda x: ','.join(set(x.dropna())), axis=1))

df1 = df1[df1['5'].ne('')]
print (df1)
   1            2   3        4  5
0  A          NaN   2  x|x|x|y  x
1  B          a|b  56      b|c  b
3  D            h  98        j  h
4  E            g  98      k|h  h
5  F  a|a|a|a|a|b  98      NaN  b

我们是否可以向结果帧中添加一列,该列的匹配值为df2?请在中查看我的结果帧question@SaadZaheer-对
5
列中的值进行排序是否重要?就像在
df2[1]
中一样,订购并不重要。这正是我想要的结果。