Python 扫描表以在列中找到某个值,然后返回另一列以前的值

Python 扫描表以在列中找到某个值,然后返回另一列以前的值,python,pandas,Python,Pandas,使用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 8 5 4 5 5 4 5 我如何创建一个函数,通过扫描找到所有的'B'值=5,然后返回前面的4个'C'值,其中'B'=1?如果只有3'B'=1,那么只返回3 在第一个'B'=5之后,我需要一个8,5,4,5的输出。第二个'B'=5应该不返回任何内容,因为它前面没有任

使用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
8
5
4
5

5
4
5
我如何创建一个函数,通过扫描找到所有的'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,如下所示:

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
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

请发布你想要的数据集,我对这里的逻辑很困惑。这都是一个功能吗?8545的输出来自哪里?如果答案有帮助,请将其标记为接受。单击答案旁边的灰色复选框将其变为绿色。我希望您不介意进行外观上的更改…;-)