3 回答

TA貢獻1854條經驗 獲得超8個贊
檢查“最近的購物清單”中是否存在字符串“Oranges”并根據結果創建一個新列“Oranges Lost”:
df['Oranges Lost'] = np.where(df['Recent shopping list'].str.contains('Oranges'), 'No Change', 'Lost')```

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

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
似乎運作良好!
添加回答
舉報