如何按动态列值选择行

时间:2019-01-26 10:25:03

标签: python pandas

我需要通过动态列值从DataFrame中选择行,但是我不知道如何编写代码来动态生成条件,请帮忙,例如:

我不知道如何产生动力条件。

df = data[(self.data[col1]==1) |  (self.data[col2]==2)]

如果我知道有2列是可以的,但是问题是实际的列是动态确定的。我应该如何在..中使用...来生成像这样的(self.data[col1]==1) | (self.data[col2]==2) |

1 个答案:

答案 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)