数据框内的数据框 - 创建新列_

时间:2021-01-02 15:31:24

标签: pandas list dataframe

对于以下数据框:

import pandas as pd

df=pd.DataFrame({'list_A':[3,3,3,3,3,\
2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4]})

如何操纵“list_A”以给出“list_B”?

所需的输出:

<头>
list_A list_B
0 3 1
1 3 1
2 3 1
3 3 0
4 2 1
5 2 1
6 2 0
7 2 0
8 4 1
9 4 1
10 4 1
11 4 1
12 4 0
13 4 0
14 4 0
15 4 0
16 4 0

如您所见,如果 List_A 的数字为 3 - 那么 List_B 的前 3 个值为“1”,然后 List_B 的值更改为“0”.....直到 List_A 再次更改值... ..

谢谢。

1 个答案:

答案 0 :(得分:2)

GroupBy.cumcount

df['list_B'] = df['list_A'].gt(df.groupby('list_A').cumcount()).astype(int)
print(df)

输出

    list_A  list_B
0        3       1
1        3       1
2        3       1
3        3       0
4        3       0
5        2       1
6        2       1
7        2       0
8        2       0
9        2       0
10       2       0
11       2       0
12       4       1
13       4       1
14       4       1
15       4       1
16       4       0
17       4       0
18       4       0
19       4       0
20       4       0
21       4       0
22       4       0
23       4       0

编辑

blocks = df['list_A'].ne(df['list_A'].shift()).cumsum()
df['list_B'] = df['list_A'].gt(df.groupby(blocks).cumcount()).astype(int)
相关问题