首页 > 解决方案 > 如何比较两行并通过Python中的索引获取结果?

问题描述

我有一个数据框

  Day Value
1  Mon   0
2  Mon   1
3  Fri   1
4  Mon   1
5  Mon   1
6  Mon   1
7  Mon   0
8  Tue   1
9  Tue   1

我想通过 Grouping with Day 列找到具有两个连续 1 的行。

预期输出:

  Day  Value
5 Mon   1
6 Mon   1
9 Tue   1

标签: pythonpython-3.xpandaspandas-groupby

解决方案


用于boolean indexing过滤:

m = df['Value'].eq(1)
s = df['Day'].ne(df['Day'].shift()).cumsum()
df = df[s[m].duplicated() & m]
print (df)
   Day  Value
5  Mon      1
6  Mon      1
9  Tue      1

详情

Series.shift首先使用andSeries.ne和 和创建连续系列Series.cumsum

print (df['Day'].ne(df['Day'].shift()).cumsum())
1    1
2    1
3    2
4    3
5    3
6    3
7    3
8    4
9    4
Name: Day, dtype: int32

1然后按以下值过滤Value

print (s[m])
2    1
3    2
4    3
5    3
6    3
8    4
9    4
Name: Day, dtype: int32

并获得Series.duplicated所有Series被称为帮助者的骗局s

print (s[m].duplicated())
2    False
3    False
4    False
5     True
6     True
8    False
9     True
Name: Day, dtype: bool

最后一个链与按位与&与原始相同大小的掩码:

print (s[m].duplicated() & m)
1    False
2    False
3    False
4    False
5     True
6     True
7    False
8    False
9     True
dtype: bool

推荐阅读