我不确定这是不是一个重复的问题,但它是这样的。
假设我有下表:
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'])将输出下表
+----+-----+
| ID | Val |
+----+-----+
| 1 | A |
+----+-----+
| 1 | A |
+----+-----+
| 1 | B |
+----+-----+
| 2 | D |
+----+-----+
| 2 | E |
+----+-----+
| 3 | A |
+----+-----+
| 3 | A |
+----+-----+
| 4 | A |
+----+-----+
| 5 | E |
+----+-----+目标是计算VAL上的重复项,按ID分组:
+----+-----+--------------+
| 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 |
+----+-----+--------------+我尝试了下面的代码,但它计算了所有的重复项
df_grouped = df.groupby(['notes']).size().reset_index(name='count')而下面的代码只执行重复计数
df.duplicated(subset=['notes'])解决这一问题的最佳方法是什么?
发布于 2020-08-12 09:33:12
让我们试试duplicated
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发布于 2020-08-12 09:29:47
您可以在相关列上使用.groupby并获取count。然后,如果将>1添加到末尾,则意味着指定组的值包含重复项。>1将创建boolean True/False数据类型。最后,要更改为1或0,只需使用.astype(int)将数据类型从boolean数据类型转换为int,这会将True更改为1,将False更改为0
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 0https://stackoverflow.com/questions/63368363
复制相似问题