[英]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
應該包含1
和2
, col3
應該包含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.