Python 如何按动态列值选择行
我需要通过动态列值从DataFrame中选择行,但我不知道应该如何编写代码来动态生成条件,请提供帮助,例如: 我不知道如何生成动力学条件Python 如何按动态列值选择行,python,pandas,Python,Pandas,我需要通过动态列值从DataFrame中选择行,但我不知道应该如何编写代码来动态生成条件,请提供帮助,例如: 我不知道如何生成动力学条件 df = data[(self.data[col1]==1) | (self.data[col2]==2)] 如果我知道有2个列,这是可以的,但问题是实际列是动态确定的。我应该如何使用。。。在里面要生成像self.data[col1]==1 | self.data[col2]==2 |这样的适当条件,这是np.logical_或.reduce,因为您有一个
df = data[(self.data[col1]==1) | (self.data[col2]==2)]
如果我知道有2个列,这是可以的,但问题是实际列是动态确定的。我应该如何使用。。。在里面要生成像self.data[col1]==1 | self.data[col2]==2 |这样的适当条件,这是np.logical_或.reduce,因为您有一个可以迭代的字典,条件是|:
样本数据
代码:
输出df1:
如果需要对同一列进行多次检查,请将列表视为值:d={‘a’:[1,3],'b':[3 ] },而应检查df[k]。无论名称如何,列都位于相同的索引位置?列数将在代码运行时确定,列是字典列表,列名是dict键,列值是dict值是条件始终|?
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]
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
...