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】:

groupbyGroupby.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_1num_2 的独特组合。所以在我的解决方案中,group_id 1 包含 7 148 14,它们是唯一的组合。 我不想要数字的唯一组合。我希望在组中 num_1num_2 的所有可能组合,其中它们都没有在组 ID 中重复。所以7 148 14 在同一组中的组合是不可能的。正如您在我的输出中看到的那样,值 14 出现了 4 次,这意味着必须至少有 4 个组,因为同一组不能包含超过一次的值 14。相同的规则适用于 num_1。 这似乎有效。非常感谢先生。

以上是关于Pandas - 创建具有唯一值的组的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 重新索引仅对具有唯一值的索引对象有效

熊猫重新索引仅对具有唯一值的索引对象有效

具有聚合唯一值的pyspark dataframe groupby [重复]

解决重新索引仅对具有唯一值的索引对象有效

Sql 为具有特定模式的组分配唯一键

Pandas - 计算并获取列中字符串值的唯一出现次数