python - 熊猫数据框按列的值过滤行,该列是一个列表
问题描述
我有一个数据框:
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]
最好的方法是什么?
解决方案
如果需要删除所有行(如果不在列表中A
或不在E
列表中),请使用set.isdisjoint
with 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]
推荐阅读
- c - 局部变量如何存储在堆栈中
- python - 将图像上传到 S3 python
- php - android用php和mysql搜索大量数据
- swift - 将节点的精灵更改为动画(spriteKit)
- ibm-cloud - 如何在 Bluemix 控制台上获取 Pitney Bowes API 的访问密钥和机密?
- android - 在android studio中触摸时如何使用动画实现移动对象?
- javascript - 更好地理解 Promise.prototype.then
- php - 如何使用 PHP 将数据插入 CosmosDB (SQL API)?
- c++ - __builtin_frame_address - 尝试访问函数堆栈帧失败
- python - 在 OS X El Capitan 上安装 pyminizip 时出错