【发布时间】:2023-03-24 00:35:01
【问题描述】:
您好,我有两个如下所示的 DataFrame
DF1
Alpha | Numeric | Special
and | 1 | @
or | 2 | #
lol ok | 4 | &
DF2 with single column
Content
boy or girl
school @ morn
pyc LoL ok student
Chandra
我想搜索 DF1 中的任何列是否有 DF2 的内容列中的任何关键字,并且输出应该在新的 DF 中
`df11 = (df1.unstack()
.reset_index(level=2,drop=True)
.rename_axis(('col_order','col_name'))
.dropna()
.reset_index(name='val_low'))
df22 = (df2['Content'].str.split(expand=True)
.stack()
.rename('val')
.reset_index(level=1,drop=True)
.rename_axis('idx')
.reset_index())`
df22['val_low'] = df22['val'].str.lower()
df = (pd.merge(df22, df11, on='val_low', how='left')
.dropna(subset=['col_name'])
.sort_values(['idx','col_order'])
.drop_duplicates(['idx']))
df = (pd.concat([df2, df.set_index('idx')], axis=1)
.fillna({'col_name':'Other'})[['val','col_name','Content']])
但它没有考虑lol ok之间的空格
expected_output_DF
val col_name Content
0 or Alpha boy or girl
1 @ Special school @ morn
2 lol ok Alpha pyc LoL ok student
3 NaN Other Chandra
有人帮我解决这个问题
【问题讨论】:
-
抱歉,您的预期输出是什么?
-
output_DF 是我的预期输出
-
如果可能请提出一个新的逻辑
-
查看我们的任何一个答案,它们的作用基本相同。
-
是的,当然@bharath,coldspeed (y)
标签: python pandas dataframe data-analysis