【发布时间】:2016-02-13 01:37:15
【问题描述】:
问题数据
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'])
数据框看起来像这样
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, pa]
2 [finish, system] [basement, finish, system, chambersburg, pa]
3 [finish, system] [basement, finish, system, christiana, pa]
4 [finish, system] [basement, finish, system, delta, pa]
上下文
StemmedAG 和 StemmedKW 是列表的列。我通过词干Ad Group 和Keyword 列来生成这些列。目标是在 Keyword 列中的关键字前面放置一个加号 +,以表示出现在 StemmedAG 和 StemmedKW 中的任何单词。
结果
注意row 0 Keyword 的值是basement +finishing +systems akron pa 吗?这是因为finish 和system 都出现在StemmedAG 和StemmedKW 中。因此,在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'] 上的字符串可能更简单?
我还想尽可能以最熊猫的方式做到这一点,并避免 for 循环。
【问题讨论】:
标签: python list pandas dataframe intersection