首页 > 解决方案 > 根据过滤器python更新列值

问题描述

我有两个数据集,分别是 df1 和 df:

df1

    df1 = pd.DataFrame({'ids': [101,102,103],'vals': ['apple','java','python']})

   ids    vals
0  101   apple
1  102    java
2  103  python

df

df = pd.DataFrame({'TEXT_DATA': [u'apple a day keeps doctor away', u'apple tree in my farm', u'python is not new language', u'Learn python programming', u'java is second language']})

                       TEXT_DATA
0  apple a day keeps doctor away
1          apple tree in my farm
2     python is not new language
3       Learn python programming
4        java is second language

我想要做的是想要根据过滤数据更新列值并将匹配数据映射到新列,以便我的输出是

                       TEXT_DATA      NEW_COLUMN
0  apple a day keeps doctor away      101
1          apple tree in my farm      101
2     python is not new language      103
3       Learn python programming      103
4        java is second language      102

我尝试使用匹配

df[df['TEXT_DATA'].str.contains("apple")]

有什么办法可以做到这一点吗?

标签: pythondataframefor-loopstring-matching

解决方案


首先,您需要提取df1['vals']. 然后,创建一个新列并将提取结果添加到新列中。最后,合并两个数据框。

extr = '|'.join(x for x in df1['vals'])
df['vals'] = df['TEXT_DATA'].str.extract('('+ extr + ')', expand=False)
newdf = pd.merge(df, df1, on='vals', how='left')

要选择结果中的字段,请在标题部分输入列名:

newdf[['TEXT_DATA','ids']]

推荐阅读