![](/img/trans.png)
[英]Pandas - Identify non-unique rows, grouping any pairs except in particular case
[英]Pandas - Identify non-unique rows, grouping any pairs
我试图找出一种非循环方式来识别(自动递增 int 将是理想的)每个 TDateID、GroupID 组合中的非唯一行组(一个组可以包含 1 行或更多行)。
这是一个看起来像的示例 DataFrame
指数 | 美分 | SD_YF | 日期ID | 组ID |
---|---|---|---|---|
10 | 182.5 | 2.1 | 0 | 0 |
11 | 182.5 | 2.1 | 0 | 0 |
12 | 153.5 | 1.05 | 0 | 1 |
13 | 153.5 | 1.05 | 0 | 1 |
14 | 43 | 11 | 1 | 2 |
15 | 43 | 11 | 1 | 2 |
4 | 152 | 21 | 1 | 2 |
5 | 152 | 21 | 1 | 2 |
我理想的输出是:
指数 | 美分 | SD_YF | 日期ID | 组ID | 统一标识 |
---|---|---|---|---|---|
10 | 182.5 | 2.1 | 0 | 0 | 1 |
11 | 182.5 | 2.1 | 0 | 0 | 2 |
12 | 153.5 | 1.05 | 0 | 1 | 3 |
13 | 153.5 | 1.05 | 0 | 1 | 4 |
14 | 43 | 11 | 1 | 2 | 5 |
15 | 43 | 11 | 1 | 2 | 6 |
4 | 152 | 21 | 1 | 2 | 5 |
5 | 152 | 21 | 1 | 2 | 6 |
我用粗体#5 来提请注意索引 14、4 是如何配对在一起的。 与#6 类似。 我希望这是有道理的!
IIUC 您需要添加组号 + 每个重复的 cumcount + 1:
df['UniID'] = (df['GroupID']
+df.groupby('GroupID').ngroup().add(1)
+df.groupby(['GroupID', 'Cents', 'SD_YF']).cumcount()
)
输出:
Index Cents SD_YF GroupID UniID
0 10 182.5 2.10 0 1
1 11 182.5 2.10 0 2
2 12 153.5 1.05 1 3
3 13 153.5 1.05 1 4
4 14 43.0 11.00 2 5
5 15 43.0 11.00 2 6
6 4 152.0 21.00 2 5
7 5 152.0 21.00 2 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.