python - 如何有效地检查 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 的行上方的数据框满足此条件:第二行的列包含零A
,B
而列对于第三行B
就C
足够了。
如果我想找到三个或更多连续的零,那么找到这种序列的方法应该可以工作。
所以最终我想要一个布尔系列,它应该看起来像:
1 false
2 true
3 true
4 false
使用该系列作为原始数据帧的掩码。
解决方案
选择数字列,然后用于shift
比较:
u = df.select_dtypes(np.number).T
((u == u.shift()) & (u == 0)).any()
1 False
2 True
3 True
4 False
dtype: bool
推荐阅读
- swift - Swift ImageCropper 返回指定“窗口”之外的图像
- swift - 强制展开的可选选项不会崩溃。为什么不?
- r - 错误:包“BiocGenerics”的延迟加载失败
- json - 我希望我的 Swift 程序中“self.q”中的值也打印到 xcode 控制台
- c# - 从列表c#中替换其描述中的值
- r - 如何在 R 中实现相当于 Refresh All(在 Excel 中)?
- .net - 如何在 .NET 中监视现有进程
- input - 在输入占位符文本中使用 Font Awesome (5) 图标
- php - PHAR 编译后不起作用
- python - While 循环的问题 (Python 2.7)