扫描表在列中找到某个值,然后返回另一列Python的先前值[关闭]

问题描述 投票:-3回答:1

使用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
python pandas
1个回答
1
投票

选项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
© www.soinside.com 2019 - 2024. All rights reserved.