我有两个数据集说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")]
我有什么方法可以做到这一点?
你可以这样做:
my_words = {'python': 103, 'apple': 101, 'java': 102}
for word in my_words.keys():
df1.loc[df1['my_column'].str.contains(word, na=False), ['my_second_column']] = my_words[word]
首先,您需要在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']]
您可以使用两个数据帧的cartesian product,然后选择相关的行和列。
tmp = df.assign(key=1).merge(df1.assign(key=1), on='key').drop(columns='key')
resul = tmp.loc[tmp.apply(func=(lambda x: x.vals in x.TEXT_DATA), axis=1)]\
.drop(columns='vals').reset_index(drop=True)