Python 扫描表以在列中找到某个值,然后返回另一列以前的值
使用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应该不返回任何内容,因为它前面没有任
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的输出来自哪里?如果答案有帮助,请将其标记为接受。单击答案旁边的灰色复选框将其变为绿色。我希望您不介意进行外观上的更改…;-)