根据其他多个条件获取列值

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

我有一个数据帧:

 cid    si
A   1
A   0
A   1
A   0
A   1
A   0
A   0
A   0
A   0
A   0
A   0
A   0
A   0
A   0
B   1
B   0
B   0
B   0
B   0
B   0
B   0

我需要有另一个名为ide的列,它应该添加相同的值,直到遇到si中的next 1并且cid中的值保持不变。如果cid中的值被更改,则标识符将重新开始。添加样本输出。

cid si  ide
A   1   aa
A   0   aa
A   1   bb
A   0   bb
A   1   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
A   0   cc
B   1   aa
B   0   aa
B   0   aa
B   0   aa
B   0   aa
B   0   aa
B   0   aa
python pandas
1个回答
1
投票

首先,定义一个映射字典,将1 ... n映射到您想要的填充值;这是一个小例子:

dct = {1: 'aa', 2: 'bb', 3: 'cc'}

然后使用groupbycumsummap

df.groupby('cid').si.cumsum().map(dct)

0     aa
1     aa
2     bb
3     bb
4     cc
5     cc
6     cc
7     cc
8     cc
9     cc
10    cc
11    cc
12    cc
13    cc
14    aa
15    aa
16    aa
17    aa
18    aa
19    aa
20    aa
Name: si, dtype: object

这里的重要部分是cumsum,因为我们知道一个新的团队正在开始:

df.groupby('cid').si.cumsum()

0     1
1     1
2     2
3     2
4     3
5     3
6     3
7     3
8     3
9     3
10    3
11    3
12    3
13    3
14    1
15    1
16    1
17    1
18    1
19    1
20    1
Name: si, dtype: int64
© www.soinside.com 2019 - 2024. All rights reserved.