Pandas群体计数

pzfprimi  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(98)

我试图将共享Pandas Dataframe 中的公共元素的组分组,我的 Dataframe 看起来像这样(我添加了空行,只是为了一些额外的可读性):

ID       REG
15      01497
15      01493

19      01706
19      01706-A

78      05710
78      01738

143     01626
143     01634

144     01626
144     01644

207     05255
207     01638

209     05255
209     03143

我希望创建一个新列,在该列中可以查找共享同一REG编号的所有ID,因此它看起来如下所示:

ID     REG          GROUP
15     01497        1
15     01493        1

19     01706        2
19     01706-A      2

78     05710        3
78     01738        3

143    01626        4
143    01634        4

144    01626        4
144    01644        4

207    05255        5
207    01638        5

209    05255        5
209    03143        5

有一些问题可以解决类似的问题,但它们并不完全相同(可能是Pandas DataFrame Groupby two columns and get countsHow do I find common values within groups in pandas?Numbering Groups In Pandas DataFrame),但我的目标不是以传统方式执行求和或计数。

2mbi3lxu

2mbi3lxu1#

一种方法是将pandas.Series.duplicatedpandas.Series.cumcum一起使用:

df["GROUP"] = (~df["ID"].duplicated() ^ df["REG"].duplicated()).cumsum()

输出:

print(df)

     ID      REG  GROUP
0    15    01497      1
1    15    01493      1
2    19    01706      2
3    19  01706-A      2
4    78    05710      3
5    78    01738      3
6   143    01626      4
7   143    01634      4
8   144    01626      4
9   144    01644      4
10  207    05255      5
11  207    01638      5
12  209    05255      5
13  209    03143      5
e4eetjau

e4eetjau2#

假设您有一个ID作为索引的 Dataframe df,请尝试:

index_lookup = df.index.unique()
df['GROUP'] = df.apply(lambda x: index_lookup.get_loc(x.index), axis=1)
print(df)

如果ID不是索引,则可以使用以下命令将其设置为索引:

df = df.set_index('Gender', inplace=True)

或者,如果您不希望更改索引用途:

index_lookup = list(df['Gender'].unique())
df['GROUP'] = df.apply(lambda x : index_lookup.index(x['Gender']), axis=1)

应该可以

相关问题