Pandas - 创建具有唯一值的组
Posted
技术标签:
【中文标题】Pandas - 创建具有唯一值的组【英文标题】:Pandas - Create groups with unique values in it 【发布时间】:2022-01-22 04:08:12 【问题描述】:我想问是否可以将 pandas DataFrame 分成组,其中两列的值在组内是唯一的?名称列是主键。
输入:
| name | num_1 | num_2 |
|--------|-------|--------|
| name_1 | 5 | 12 |
| name_2 | 5 | 12 |
| name_3 | 5 | 12 |
| name_4 | 7 | 14 |
| name_5 | 7 | 14 |
| name_6 | 8 | 14 |
| name_7 | 8 | 14 |
| name_8 | 9 | 13 |
| name_9 | 9 | 13 |
| name_10| 9 | 13 |
输出:
| name | num_1 | num_2 | group_id |
|--------|-------|--------|----------|
| name_1 | 5 | 12 | 1 |
| name_2 | 5 | 12 | 2 |
| name_3 | 5 | 12 | 3 |
| name_4 | 7 | 14 | 1 |
| name_5 | 7 | 14 | 2 |
| name_6 | 8 | 14 | 3 |
| name_7 | 8 | 14 | 4 |
| name_8 | 9 | 13 | 1 |
| name_9 | 9 | 13 | 2 |
| name_10| 9 | 13 | 3 |
基本上 num_1 和 num_2 不能在组中重复。有什么办法可以用熊猫来做吗?
【问题讨论】:
【参考方案1】:将groupby
与Groupby.cumcount
一起使用:
In [1450]: df['group_id'] = df.groupby('num_2').cumcount() + 1
In [1451]: df
Out[1451]:
name num_1 num_2 group_id
0 name_1 5 12 1
1 name_2 5 12 2
2 name_3 5 12 3
3 name_4 7 14 1
4 name_5 7 14 2
5 name_6 8 14 3
6 name_7 8 14 4
7 name_8 9 13 1
8 name_9 9 13 2
9 name_10 9 13 3
【讨论】:
感谢您的回复,我运行了 7k 的记录,但没有正确划分组。在 group_id 1 中,num_2 列中有很多重复项,num_1 列中有一些重复项。 在你的输出中 group_id: 1 包含两次值 14 @pipikej 据我了解这个问题,您需要num_1
和num_2
的独特组合。所以在我的解决方案中,group_id 1
包含 7 14
和 8 14
,它们是唯一的组合。
我不想要数字的唯一组合。我希望在组中 num_1
和 num_2
的所有可能组合,其中它们都没有在组 ID 中重复。所以7 14
和8 14
在同一组中的组合是不可能的。正如您在我的输出中看到的那样,值 14 出现了 4 次,这意味着必须至少有 4 个组,因为同一组不能包含超过一次的值 14。相同的规则适用于 num_1。
这似乎有效。非常感谢先生。以上是关于Pandas - 创建具有唯一值的组的主要内容,如果未能解决你的问题,请参考以下文章