首页 > 解决方案 > 如何有效地检查 Pandas 数据帧每一行中的连续值范围?

问题描述

假设我们有一个看起来像这样的 pandas 数据框:

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

所以现在我想获取这个数据帧的行,其中至少包含例如两个零在列A, B, C,中的顺序D
对于索引为 2 和 3 的行上方的数据框满足此条件:第二行的列包含零AB而列对于第三行BC足够了。

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

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

1 false
2 true
3 true
4 false

使用该系列作为原始数据帧的掩码。

标签: pythonpandasdataframe

解决方案


选择数字列,然后用于shift比较:

u = df.select_dtypes(np.number).T
((u == u.shift()) & (u == 0)).any()

1    False
2     True
3     True
4    False
dtype: bool

推荐阅读