python - pandas:输出两列字符串列表之间的差异
问题描述
我有一个包含两列的数据框,如下所示:
df = pd.DataFrame({'pos_1':[['VERB', 'PRON', 'DET', 'NOUN', 'ADP'],['NOUN', 'PRON', 'DET', 'NOUN', 'ADV', 'ADV']],
'pos:2':[['VERB', 'PRON', 'DET', 'NOUN', 'ADP'],['VERB', 'PRON', 'DET', 'NOUN', 'ADV', 'ADV']]})
我正在尝试使用 apply 输出这两列之间的差异。
df['diff'] = df.apply(lambda x: [i for i in x['pos_1'] if i not in x['pos_2']], axis=1)
我想要的 diff 列输出应该是:
diff
1 []
2 ['NOUN','VERB']
但相反,我在 diff 列中得到了两个空列表。我不知道我做错了什么
解决方案
如果需要比较两个列表元素并返回差异,请使用zip
比较每对并最后通过嵌套列表理解将其展平:
f = lambda x: [z for i, j in zip(x['pos_1'],x['pos_2']) if i != j for z in [i, j]]
df['diff'] = df.apply(f, axis=1)
print (df)
pos_1 pos_2 \
0 [VERB, PRON, DET, NOUN, ADP] [VERB, PRON, DET, NOUN, ADP]
1 [NOUN, PRON, DET, NOUN, ADV, ADV] [VERB, PRON, DET, NOUN, ADV, ADV]
diff
0 []
1 [NOUN, VERB]
推荐阅读
- python - Python f 字符串格式不适用于 strftime 内联
- powershell - 如何在 Office365 中自动删除 Exchange 联系人
- python-3.x - Flask TypeError: argument of type 'NoneType' is not iterable
- android - 将新的 APK 上传到 PlayStore
- git - 与来自不同地点的团队一起在同一个项目上编码
- android - XML 布局与模拟器不同
- c++ - 存储给定矩阵
- python - 从网络路径运行 python 文件
- javascript - 如何将精灵表图像缩放到容器?
- ios - 如何在 Swift 中使用 Arkit 在图像上播放托管视频?