首页 > 解决方案 > 熊猫数据框按列的值过滤行,该列是一个列表

问题描述

我有一个数据框:

df = col1. col2. col3
      1.    2.   []
      3.    1.   [A]
      8.    9.   [C,D]
      2.    4.   [E]
      9.    2.   [E,T]

当 E 不在 col3 中且 A 不在 col3 中时,我只想取行所以在示例中,我将拥有:

      1.    2.   []
      8.    9.   [C,D]

最好的方法是什么?

标签: pythonpandasdataframe

解决方案


如果需要删除所有行(如果不在列表中A或不在E列表中),请使用set.isdisjointwith Series.map

df = df[df.col3.map(set(['A','E']).isdisjoint)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
2   8.0   9.0  [C, D]

另一个想法是将列表转换为DataFrame,因此可能DataFrame.isin与 一起使用DataFrame.any

df = df[~pd.DataFrame(df.col3.tolist(), index=df.index).isin(['A','E']).any(axis=1)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
2   8.0   9.0  [C, D]

如果只需要测试E

df = df[~df.col3.map(lambda x: 'E' in x)]
print (df)
   col1  col2    col3
0   1.0   2.0      []
1   3.0   1.0     [A]
2   8.0   9.0  [C, D]

推荐阅读