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

时间:2018-09-07 21:43:32

标签: python pandas

我有一个数据框:

 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中的下一个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

1 个答案:

答案 0 :(得分:1)

首先,定义一个映射字典,该映射将1 ... n与所需的填充值进行映射;这是一个小例子:

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

然后使用 groupby cumsum map

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