检查一个数据帧列中的值是否存在于另一个数据帧中以分号分隔的值中

2024-06-25 23:58:56 发布

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

我有两个数据帧 df1

----------------
Column_df1
------------------
abc
pqr
xyz

另一个数据帧是df2

-----------------------------------
Column_df2_value      Column_df2
------------------------------------
aaa                   abc;mkp;txy
jjj                   tkp;xyz;lmn
ppp                   vnm;pqr;tmc
dbm                   krt;qwe;cfe
wer                   weq;trt;cfd

我的结果数据帧如下所示

-------------------------------------
column_df1      column_df2_value
-------------------------------------
abc              aaa
pqr              ppp
xyz              jjj

我正在努力做到这一点

mask=np.where(df1['Column_df1'].tolist().isin(df2['column_df2_value'].str.split(';',expand=True)).any(1))

df["value_exists"]=df1[mask]

但它不起作用。我需要做什么才能获得以下数据帧

-------------------------------------
column_df1      column_df2_value
-------------------------------------
abc              aaa
pqr              ppp
xyz              jjj

Tags: 数据valuecolumnmaskdf1df2pppabc
2条回答

让我们在{}上尝试{a1}+{a2},然后{a3}返回{}:

df2['Column_df2'] = df2['Column_df2'].str.split(';')
df2 = df2.explode('Column_df2')

df3 = df1.merge(df2.rename(columns={'Column_df2': 'Column_df1'}),
                on='Column_df1',
                how='left')

df3

  Column_df1 Column_df2_value
0        abc              aaa
1        pqr              ppp
2        xyz              jjj

创建列表,参见str.split、explode和左合并

df2=df2.assign(Column_df2=df2['Column_df2'].str.split(';')).explode('Column_df2')
pd.merge(df1,df2, how='left', left_on='Column_df1', right_on='Column_df2')

    Column_df1 Column_df2_value Column_df2
0        abc              aaa        abc
1        pqr              ppp        pqr
2        xyz              jjj        xyz

相关问题 更多 >