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

时间:2017-12-26 14:28:05

标签: python pandas

使用python,从这样的表:

>>> Decimal("21") / 2
Decimal('10')

如何创建一个扫描所有'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

1 个答案:

答案 0 :(得分: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