簡體   English   中英

如何過濾具有列表列的 Pandas DataFrames?

[英]How to filter pandas DataFrames that have columns with lists?

我有包含某些列中的列表的 Pandas DataFrame:

col1    col2      col3
a       [1]       [a,b]
b       [1,2,3]   [a,c]
b       [1,2,3]   [b,c]
b       [1,3]     [b,c]

我想獲得這個 DataFrame 的一個子集。 在這個子集中, col2應該包含12col3應該包含a

在我的例子中,答案應該是:

col1    col2      col3
b       [1,2,3]   [a,c]

這是我到目前為止嘗試過的:

df[df["col2"].str.contains("1,2", na=False)]

我該如何解決我的任務?

我想你正在尋找這個

df['bool'] = df.apply(lambda x: True if 1 in x['col2'] and 2 in x['col2'] and 'a' in x['col3'] 
else False, axis=1)
df_subset = df.loc[df['bool'] == True, :]
del df_subset['bool']
print(df_subset)

首先使用apply是否匹配條件添加一個布爾列,然后根據該列進行過濾

您可以使用集合操作找到子集

df[df.apply(lambda x: not {1, 2, 'a'} - (set(x.col2) | set(x.col3)), axis=1)]

出去:

  col1       col2    col3
1    b  [1, 2, 3]  [a, c]

內聯方法
假設df是原始數據框

df[[True if 1 in i and 2 in i and "a" in j else False for i,j in zip(df.col2,df.col3) ]]

可以解決問題

可以根據需要修改邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM