使用python,从这样的表:
A B C
0 1 5
1 1 8
2 1 5
3 1 4
4 1 5
5 5 10
6 5 9
7 1 5
8 1 4
9 1 5
10 5 4
如何创建一个扫描函数以查找所有'B'值= 5,然后返回之前的4'C'值,其中'B'= 1?如果只有3'B'= 1,则返回3。
在第一个'B'= 5后,我需要输出8,5,4,5。第二个'B'= 5应该什么也不返回,因为它前面没有任何'B'= 1。第三个'B'= 5需要返回5,4,5。这应该写入一个全新的数据集,每个新的'B'= 5值之间有一个空格,如下所示:
8
5
4
5
5
4
5
选项1
loc
+ groupby
+ tail
-
i = df.B.eq(5).cumsum()
df.loc[df.B == 1, 'C'].groupby(i, group_keys=False).tail(4)
1 8
2 5
3 4
4 5
7 5
8 4
9 5
Name: C, dtype: int64
选项2
groupby
+ apply
。
v = df.B.groupby(i, group_keys=False).apply(lambda x: x[x == 1].iloc[-4:]).index
df.loc[v, 'C']
1 8
2 5
3 4
4 5
7 5
8 4
9 5
Name: C, dtype: int64