假设我们有一个像这样的熊猫数据框:
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
列中的两个零。 br />
对于上方的数据帧,具有索引2和3的行满足以下条件:第二行的A
,B
列包含零,而第三行的B
,C
列足够行。
如果我想找到三个或更多的连续零,那么找到这种序列的方法应该可以工作。
所以最终我想要一个布尔系列,看起来应该像这样:
1 false
2 true
3 true
4 false
将该系列用作原始数据框的掩码。
答案 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