我需要通过动态列值从DataFrame中选择行,但是我不知道如何编写代码来动态生成条件,请帮忙,例如:
我不知道如何产生动力条件。
df = data[(self.data[col1]==1) | (self.data[col2]==2)]
如果我知道有2列是可以的,但是问题是实际的列是动态确定的。我应该如何在..中使用...来生成像这样的(self.data[col1]==1) | (self.data[col2]==2) |
答案 0 :(得分:1)
这是np.logical_or.reduce
,因为您有可以迭代的字典,条件是|
:
import numpy as np
import pandas as pd
np.random.seed(1)
df = pd.DataFrame(np.random.randint(1,10, (100, 10)), columns=list('abcdefghij'))
d = {'a': 1, 'b': 3, 'h': 8, 'f': 4}
mask = np.logical_or.reduce([df[k] == v for k,v in d.items()])
df1 = df.loc[mask]
df1
: a b c d e f g h i j
1 6 3 5 3 5 8 8 2 8 1
3 8 4 7 6 2 4 5 9 2 5
4 1 4 3 1 5 3 8 8 9 7
5 4 8 8 5 6 4 7 9 1 3
6 8 8 8 4 1 9 8 8 2 2
12 2 3 2 6 5 1 8 9 6 8
13 1 4 2 5 5 7 9 9 3 8
22 7 8 1 4 1 4 5 8 6 4
...
如果需要对同一列进行多次检查,则将列表视为值:d = {'a': [1,3], 'b': [3]}
而不是选中df[k].isin(v)