如何有效检查熊猫数据框中每一行的值的连续范围?

时间:2019-05-02 22:29:46

标签: python pandas dataframe

假设我们有一个像这样的熊猫数据框:

df = pd.DataFrame(
        {'A': [0, 0, 1, 0],
        'a': list('aaaa'),
        'B': [1, 0 , 0, 1],
        'b': list('bbbb'),
        'C': [1, 1, 0, 1],
        'c': list('cccc'),
        'D': [0, 1, 0, 1],
        'd': list('dddd')},
        index=[1, 2, 3, 4])

输出为:

   A  a  B  b  C  c  D  d
1  0  a  1  b  1  c  0  d
2  0  a  0  b  1  c  1  d
3  1  a  0  b  0  c  0  d
4  0  a  1  b  1  c  1  d

因此,现在我想要获取此数据帧的行,该行至少包含例如ABCD列中的两个零。 br /> 对于上方的数据帧,具有索引2和3的行满足以下条件:第二行的AB列包含零,而第三行的BC列足够行。

如果我想找到三个或更多的连续零,那么找到这种序列的方法应该可以工作。

所以最终我想要一个布尔系列,看起来应该像这样:

1 false
2 true
3 true
4 false

将该系列用作原始数据框的掩码。

3 个答案:

答案 0 :(得分:3)

选择数字列,然后使用map进行比较:

shift

答案 1 :(得分:1)

从CS95设置数据

u = df.select_dtypes(np.number).T

(u.rolling(2).sum()==0).any()
Out[404]: 
1    False
2     True
3     True
4    False
dtype: bool

答案 2 :(得分:0)

您可以使用pandas' apply function并定义自己的函数来检查您的状况,如下所示:

# columns you want to check. Note they have to be in the right order!!
columns = ["A", "B", "C", "D"]

# Custom function you apply over df, takes a row as input
def zeros_condition(row):
    # loop over the columns.
    for n in range(len(columns)-1): 
        # return true if 0s in two adjacent columns, else false
        if row[columns[n]] == row[columns[n+1]] == 0:
            return True
    return False

result = df.apply(zeros_condition, axis=1)

结果是:

1    False
2     True
3     True
4    False
dtype: bool