我是這個網站和 Python 的新手,這個問題可能有點基礎。
我有一個熊貓系列,其中包含每行中的元素串列,我試圖過濾每個串列以僅將元素保留在給定串列中。
reference_list = [item_a, item_c]
index answers
1 [item_a, item_b, item_c]
2 [item_c, item_d, item_e]
3 [item_a, item_c, item_b]
我正在尋找的輸出看起來像這樣
index answers
1 [item_a, item_c]
2 [item_c]
3 [item_a, item_c]
到目前為止,我已經嘗試過for回圈、pd.Series.apply(lambda x:)函式和理解串列,但沒有得到我需要的結果。
如果有人能給我關于我的錯誤的進一步見解,我將不勝感激。
uj5u.com熱心網友回復:
檢查map串列檢查
df['new'] = df.answers.map(lambda x : [y for y in x if y in reference_list])
uj5u.com熱心網友回復:
你可以試試:
df['answers'] = df['answers'].apply(lambda x: list(filter(lambda y: y in set(reference_list), x)))
uj5u.com熱心網友回復:
使用 numpy 中的“np.in1d”函式進行過濾。
import numpy as np
for i in range(0, len(df['answers'])):
df.iat[i, 0] = np.array(df.iat[i, 0])[np.in1d(df.iat[i, 0], reference_list)]
輸出
answers
1 [item_a, item_c]
2 [item_c]
3 [item_a, item_c]
uj5u.com熱心網友回復:
您需要用過濾后的列覆寫該列或創建一個新列:
import pandas as pd
df =pd.DataFrame( {"answers":[ [1,2,3,4],[1,4],[1,3,42]] })
# keep only odd elements, put them into "filtered"
df["filtered"] = df["answers"].apply(lambda v : [a for a in v if a%2==1])
print(df)
輸出:
answers filtered
0 [1, 2, 3, 4] [1, 3]
1 [1, 4] [1]
2 [1, 3, 42] [1, 3]
uj5u.com熱心網友回復:
usingset是另一種選擇:
reference_set = set(reference_list)
df['new'] = df.answers.map(set).map(lambda x: x&reference_set).map(list)
>>> df
'''
answers new
1 [item_a, item_b, item_c] [item_a, item_c]
2 [item_c, item_d, item_e] [item_c]
3 [item_a, item_c, item_b] [item_a, item_c]
uj5u.com熱心網友回復:
也許你可以使用 where 的功能。
pandas.where 祝你有美好的一天
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479727.html
標籤:Python python-3.x 熊猫 数据框 系列
上一篇:Pandas資料框:在python中將Int列轉換為二進制
下一篇:添加串列列
