Python对列表的数据帧列进行处理,获取交集并将函数应用于另一列

2024-06-13 21:42:33 发布

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

问题数据

df = pd.DataFrame({'Keyword': ['basement finishing systems akron pa', 'basement finishing systems biglerville pa', 'basement finishing systems chambersburg pa', 'basement finishing systems christiana pa', 'basement finishing systems delta pa'], 'StemmedKW': [['basement', 'finish', 'system', 'akron', 'pa'], ['basement', 'finish', 'system', 'biglervil', 'pa'], ['basement', 'finish', 'system', 'chambersburg', 'pa'], ['basement', 'finish', 'system', 'christiana', 'pa'], ['basement', 'finish', 'system', 'delta', 'pa']], 'Ad Group': ['Finishing System', 'Finishing System', 'Finishing System', 'Finishing System', 'Finishing System'], 'Campaign': ['Campaign A', 'Campaign A', 'Campaign A', 'Campaign A', 'Campaign A'], 'StemmedAG': [['finish', 'system'], ['finish', 'system'], ['finish', 'system'], ['finish', 'system'], ['finish', 'system']]}, columns=['Campaign', 'Ad Group', 'Keyword', 'StemmedAG', 'StemmedKW'])

数据帧如下所示

^{pr2}$

上下文

StemmedAG和{}是列表的列。我通过词干为Ad GroupKeyword列生成这些列。目标是在Keyword列中的关键字前面加一个加号Keyword,表示出现在StemmedAG和{}中的任何单词。在

结果

注意row 0Keyword的值是basement +finishing +systems akron pa?这是因为单词finishsystem都出现在StemmedAG和{}中。因此,加号放在Keyword列中的非词干单词的前面。在

     Campaign          Ad Group                                       Keyword  \
0  Campaign A  Finishing System         basement +finishing +systems akron pa   
1  Campaign A  Finishing System   basement +finishing +systems biglerville pa   
2  Campaign A  Finishing System  basement +finishing +systems chambersburg pa   
3  Campaign A  Finishing System    basement +finishing +systems christiana pa   
4  Campaign A  Finishing System         basement +finishing +systems delta pa   

              StemmedAG                                          StemmedKW  
0  ['finish', 'system']    ['basement', 'finish', 'system', 'akron', 'pa']  
1  ['finish', 'system']  ['basement', 'finish', 'system', 'biglervil', ...  
2  ['finish', 'system']  ['basement', 'finish', 'system', 'chambersburg...  
3  ['finish', 'system']  ['basement', 'finish', 'system', 'christiana',...  
4  ['finish', 'system']    ['basement', 'finish', 'system', 'delta', 'pa'] 

我不习惯在Pandas列中使用lists,也不知道如何从dataframe的两列中得到lists的交集,然后得到单词出现的索引,然后在每个找到的索引的前面加上加号。或者更简单的方法是使用StemmedAG中的单词对df['Keyword']进行字符串替换?在

我也希望尽可能多地使用pandas方法来实现这一点,并避免for循环。在


Tags: 单词systemkeywordsystemscampaignpafinishbasement
1条回答
网友
1楼 · 发布于 2024-06-13 21:42:33

我想出了如何用非熊猫的方法来实现这一点,但这很糟糕。我真的很想学习如何用熊猫来做这件事(如果可能的话!)在

for idx in df.index:
    intersect = list(set(df['StemmedAG'][idx]).intersection(df['StemmedKW'][idx]))
    positions = [i for word in intersect for i, j in enumerate(df['StemmedKW'][idx]) if j == word]
    df.loc[idx, 'Keyword'] = ' '.join(["+"+word if df['Keyword'][idx].split().index(word) in positions else word for word in df['Keyword'][idx].split()])

相关问题 更多 >