python - Pandas 将同一数据框中两列中的字符串与条件输出进行比较到新列
问题描述
我在包含字符串的数据框中有两列。例如,
import pandas as pd
import numpy as np
data = [['Oct-2019', 'Oranges + Grapes + Pears', 'Grapes + Pears'],
['Nov-2019', 'Oranges + Grapes + Pears', 'Oranges + Grapes + Pears']]
df = pd.DataFrame(data, columns =['Date', 'Previous shopping list', 'Recent shopping list'])
print(df)
Fish = ['Salmon', 'Trout']
Fruit = ['Oranges', 'Grapes', 'Pears']
Date PSL RSL
0 Oct-2019 Oranges + Grapes Grapes + Pears
+ Pears + Salmon
1 Nov-2019 Oranges + Grapes Oranges + Grapes
+ Pears + Trout + Pears
我想比较两列中的字符串,并将文本输出到一个新列,该列说明两个列表之间发生了什么变化。例如,创建一个列,该列将检查与“水果”相关的字符串,并输出与上一个列表之前的购物列表相比,从最近的购物中删除了哪些水果。请参阅下面的所需输出:
Date PSL RSL Fruit lost Fish Lost
0 Oct-2019 Oranges + Grapes Grapes + Pears Oranges Salmon
+ Pears + Salmon
1 Nov-2019 Oranges + Grapes Oranges + Grapes Trout
+ Pears + Trout + Pears
在使用熊猫时我怎么能做到这一点!抱歉,如果这是第一次不清楚!
感谢您的任何建议/帮助!
解决方案
用于处理数据的确切函数取决于每个组合所需的确切输出。希望下面会给您足够的信息来为您的问题创建解决方案:
# process data so each row contains a list of elements
df['PSL_processed'] = df['Previous shopping list'].str.split('+')
df['RSL_processed'] = df['Recent shopping list'].str.split('+')
def compare_items(x):
if set(x.PSL_processed) == set(x.RSL_processed):
return 'No change'
elif set(x.PSL_processed) - set(x.CSL_processed) > 0:
return 'Lost'
# add in conditional logic here, to meet specification
df.apply(compare_items, axis=1)
的官方文档pd.apply()
写得很好。
推荐阅读
- azure-functions - Azure 函数代理 - 必需的请求标头
- terminal - 如何找出导致它始终显示的原因并将其删除?
- r - ggplot2 - 带有地毯图的自定义直方图
- .net - /signin-oidc 多个客户端实例上的 404(数据保护问题)
- html - 如何在没有互联网连接的情况下使用 Google 字体
- c# - 如何使用 Webdriver Selenium C# 执行每个标记表(tr)的 onclick
- php - Bug 菜单侧边栏 PHP Yii 1.1 使用模板
- javascript - 如何使用 React DnD 获取实时坐标
- c# - 在 C# 中过滤 Xml 中的属性并修改 Xml
- python - 如何在python中将文件路径作为全局变量?