为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 将同一数据框中两列中的字符串与条件输出进行比较到新列

Pandas 将同一数据框中两列中的字符串与条件输出进行比较到新列

慕莱坞森 2022-07-05 15:54:58
我在包含字符串的数据框中有两列。例如,import pandas as pdimport numpy as npdata = [['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                 RSL0  Oct-2019   Oranges + Grapes    Grapes + Pears              + Pears + Salmon                     1  Nov-2019   Oranges + Grapes    Oranges + Grapes              + Pears + Trout     + Pears  我想比较两列中的字符串,并将文本输出到一个新列,该列说明两个列表之间发生了什么变化。例如,创建一个列,该列将检查与“水果”相关的字符串,并输出与上一个列表之前的购物列表相比,从最近的购物中删除了哪些水果。请参阅下面的所需输出:     Date     PSL                 RSL               Fruit lost   Fish Lost0  Oct-2019   Oranges + Grapes    Grapes + Pears    Oranges      Salmon              + Pears + Salmon                     1  Nov-2019   Oranges + Grapes    Oranges + Grapes               Trout              + Pears + Trout     + Pears  在使用熊猫时我怎么能做到这一点!抱歉,如果这是第一次不清楚!感谢您的任何建议/帮助!
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

检查“最近的购物清单”中是否存在字符串“Oranges”并根据结果创建一个新列“Oranges Lost”:

df['Oranges Lost'] = np.where(df['Recent shopping list'].str.contains('Oranges'), 'No Change', 'Lost')```



查看完整回答
反对 回复 2022-07-05
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

用于处理数据的确切函数取决于每个组合所需的确切输出。希望下面会给您足够的信息来为您的问题创建解决方案:


# 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()写得很好。


查看完整回答
反对 回复 2022-07-05
?
LEATH

TA贡献1936条经验 获得超6个赞

所以马克的解决方案很好地抓住了列表之间的差异


# 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):

    return set(x.PSL_processed) - set(x.RSL_processed)

    # add in conditional logic here, to meet specification

df['Products_lost'] = df.apply(compare_items, axis=1)


print(df)

除此之外,为了找到=水果和产品=鱼的产品,我使用了以下内容:


for idx, row in df.iterrows():

    for c in Fruit:

        if c in row['Products_lost']:

            df.ix[idx, 'Fruit lost'] = c

            for c in Fish:

                if c in row['Products_lost']:

                    df.ix[idx, 'Fish lost'] = c

似乎运作良好!



查看完整回答
反对 回复 2022-07-05
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信