numpy 根据python数据框中的两列对排序列进行分类

0wi1tuuw  于 2023-03-23  发布在  Python
关注(0)|答案(2)|浏览(117)

我想按升序枚举Customer-Assessor组。重新启动每个客户端。你能帮我怎么做吗?我已经尝试使用groupby函数,但是,我不能为每个客户端重新启动它。
下面是dataframe的一个例子:
| 日期|客户|顾问|
| - ------|- ------|- ------|
| 2023年1月1日|A类|AA|
| 2023年2月1日|A类|BB型|
| 2023年1月3日|A类|消委会|
| 2023年4月1日|A类|AA|
| 2023年1月1日|B|AA|
| 2023年2月1日|B|BB型|
| 2023年1月3日|B|AA|
| 2023年4月1日|B|消委会|
遵循预期结果:日期很重要,但 Dataframe 已经按日期排序。
| 日期|客户|顾问|客户顾问|
| - ------|- ------|- ------|- ------|
| 2023年1月1日|A类|AA|1个|
| 2023年2月1日|A类|BB型|第二章|
| 2023年1月3日|A类|消委会|三个|
| 2023年4月1日|A类|AA|1个|
| 2023年1月1日|B|AA|1个|
| 2023年2月1日|B|BB型|第二章|
| 2023年1月3日|B|AA|1个|
| 2023年4月1日|B|消委会|三个|
谢谢

inkz8wg9

inkz8wg91#

使用pd.Series.factorizeAdvisor值编码为分类变量:

df['Customer-Advisor'] = np.ravel([g['Advisor'].factorize()[0] + 1 
                                   for _, g in df.groupby('Customer', sort=False)])
Date Customer Advisor  Customer-Advisor
0  01/01/2023        A       AA                 1
1  02/01/2023        A       BB                 2
2  03/01/2023        A       CC                 3
3  04/01/2023        A       AA                 1
4  01/01/2023        B       AA                 1
5  02/01/2023        B       BB                 2
6  03/01/2023        B       AA                 1
7  04/01/2023        B       CC                 3
euoag5mw

euoag5mw2#

看起来您需要为每个Advisor指定一个唯一的ID。

df["group_id"] = df.groupby(["Advisor"]).ngroup()

这将从0开始标识,但如果您真的关心这个问题,可以只向列中添加一个。
如果您想为多个组(例如客户和顾问)生成一个唯一的ID,只需添加到groupby中的列表。

df["group_id"] = df.groupby(["Customer", "Advisor"]).ngroup()

相关问题