首页 > 解决方案 > 数据框内的数据框 - 创建新列_

问题描述

对于以下数据框:

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”?

期望的输出:

列表_A 列表_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 再次更改值......

谢谢你。

标签: pandaslistdataframe

解决方案


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)

推荐阅读