Dem*_*unt 3 python dataframe pandas
我是熊猫和蟒蛇的新手。我想用字典过滤DataFrame
import pandas as pd
from pandas import DataFrame
df = DataFrame({'A': [1, 2, 3, 3, 3, 3], 'B': ['a', 'b', 'f', 'c', 'e', 'c'], 'D':[0,0,0,0,0,0]})
my_filter = {'A':[3], 'B':['c']}
Run Code Online (Sandbox Code Playgroud)
当我打电话
df[df.isin(my_filter)]
Run Code Online (Sandbox Code Playgroud)
我得到
A B D
0 NaN NaN NaN
1 NaN NaN NaN
2 3.0 NaN NaN
3 3.0 c NaN
4 3.0 NaN NaN
5 3.0 c NaN
Run Code Online (Sandbox Code Playgroud)
我想要的是
A B D
3 3.0 c 0
5 3.0 c 0
Run Code Online (Sandbox Code Playgroud)
我不想在字典中添加“D”,我想获取在 A 和 B 中具有正确值的行
你可以sum的True按列,然后比较2:
print (df.isin(my_filter).sum(1) == 2)
0 False
1 False
2 False
3 True
4 False
5 True
dtype: bool
print (df[df.isin(my_filter).sum(1) == 2])
A B D
3 3 c 0
5 3 c 0
Run Code Online (Sandbox Code Playgroud)
与第一过滤器的另一种解决方案只用条件列A和B与all用于检查都True按列:
print (df[df[['A','B']].isin(my_filter).all(1)])
A B D
3 3 c 0
5 3 c 0
Run Code Online (Sandbox Code Playgroud)
感谢您MaxU提供更灵活的解决方案:
print (df[df.isin(my_filter).sum(1) == len(my_filter.keys())])
A B D
3 3 c 0
5 3 c 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3809 次 |
| 最近记录: |