首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计按ID分组的熊猫重复数

问统计按ID分组的熊猫重复数
EN

Stack Overflow用户
提问于 2020-08-12 09:13:03
回答 2查看 100关注 0票数 0

我不确定这是不是一个重复的问题,但它是这样的。

假设我有下表:

代码语言:javascript
复制
import pandas

lst = [1,1,1,2,2,3,3,4,5] 
lst2 = ['A','A','B','D','E','A','A','A','E'] 
  
df = pd.DataFrame(list(zip(lst, lst2)), 
               columns =['ID', 'val'])

将输出下表

代码语言:javascript
复制
+----+-----+
| ID | Val |
+----+-----+
| 1  | A   |
+----+-----+
| 1  | A   |
+----+-----+
| 1  | B   |
+----+-----+
| 2  | D   |
+----+-----+
| 2  | E   |
+----+-----+
| 3  | A   |
+----+-----+
| 3  | A   |
+----+-----+
| 4  | A   |
+----+-----+
| 5  | E   |
+----+-----+

目标是计算VAL上的重复项,按ID分组:

代码语言:javascript
复制
+----+-----+--------------+
| ID | Val | is_duplicate |
+----+-----+--------------+
| 1  | A   | 1            |
+----+-----+--------------+
| 1  | A   | 1            |
+----+-----+--------------+
| 1  | B   | 0            |
+----+-----+--------------+
| 2  | D   | 0            |
+----+-----+--------------+
| 2  | E   | 0            |
+----+-----+--------------+
| 3  | A   | 1            |
+----+-----+--------------+
| 3  | A   | 1            |
+----+-----+--------------+
| 4  | A   | 0            |
+----+-----+--------------+
| 5  | E   | 0            |
+----+-----+--------------+

我尝试了下面的代码,但它计算了所有的重复项

代码语言:javascript
复制
 df_grouped = df.groupby(['notes']).size().reset_index(name='count')

而下面的代码只执行重复计数

代码语言:javascript
复制
 df.duplicated(subset=['notes'])

解决这一问题的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-12 09:33:12

让我们试试duplicated

代码语言:javascript
复制
df['is_dup']=df.duplicated(subset=['ID','val'],keep=False).astype(int)
df
Out[21]: 
   ID val  is_dup
0   1   A       1
1   1   A       1
2   1   B       0
3   2   D       0
4   2   E       0
5   3   A       1
6   3   A       1
7   4   A       0
8   5   E       0
票数 2
EN

Stack Overflow用户

发布于 2020-08-12 09:29:47

您可以在相关列上使用.groupby并获取count。然后,如果将>1添加到末尾,则意味着指定组的值包含重复项。>1将创建boolean True/False数据类型。最后,要更改为1或0,只需使用.astype(int)将数据类型从boolean数据类型转换为int,这会将True更改为1,将False更改为0

代码语言:javascript
复制
df['is_duplicate'] = (df.groupby(['ID','val'])['val'].transform('count') > 1).astype(int)

Out[7]: 
   ID val  is_duplicate
0   1   A             1
1   1   A             1
2   1   B             0
3   2   D             0
4   2   E             0
5   3   A             1
6   3   A             1
7   4   A             0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63368363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档