亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超7個贊

所以馬克的解決方案很好地抓住了列表之間的差異


# 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 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號