基于Pandas按ID和日期识别重复值并生成Indicator列
Pandas实现问卷数据重复回答标识
需求说明
按用户ID和填写日期分组,若同一组内的Value 1或Value 2存在重复值,则该组所有行新增的Indicator列取值为1,否则为0。
实现代码
import pandas as pd # 构造原始数据(替换为你的实际数据即可) data = { 'ID': [12345, 12345, 13459, 13459, 13459, 12345, 12345], 'Date': ['1.1.2023', '1.1.2023', '2.10.2020', '2.10.2020', '2.10.2020', '4.6.2017', '4.6.2017'], 'Value 1': [32, 54, 19, 19, 19, 54, 33], 'Value 2': [21, 43, 58, 85, 34, 22, 33] } df = pd.DataFrame(data) # 定义分组检查重复的函数 def has_duplicates(group): val1_has_dup = len(group['Value 1'].unique()) < len(group) val2_has_dup = len(group['Value 2'].unique()) < len(group) return 1 if val1_has_dup or val2_has_dup else 0 # 生成Indicator列 df['Indicator'] = df.groupby(['ID', 'Date']).transform(has_duplicates) # 查看结果 print(df)
代码解释
- 分组逻辑:通过
groupby(['ID', 'Date'])将数据按用户和填写日期分组,确保只检查同一用户同日期下的回答。 - 重复判断:在分组内,通过比较列的唯一值数量和组内行数,判断是否存在重复值。只要
Value 1或Value 2有重复,就返回1。 - 广播赋值:使用
transform方法将分组的判断结果应用到组内每一行,保证每个条目都能获得对应的Indicator值。
输出结果
| ID | Date | Value 1 | Value 2 | Indicator |
|---|---|---|---|---|
| 12345 | 1.1.2023 | 32 | 21 | 0 |
| 12345 | 1.1.2023 | 54 | 43 | 0 |
| 13459 | 2.10.2020 | 19 | 58 | 1 |
| 13459 | 2.10.2020 | 19 | 85 | 1 |
| 13459 | 2.10.2020 | 19 | 34 | 1 |
| 12345 | 4.6.2017 | 54 | 22 | 1 |
| 12345 | 4.6.2017 | 33 | 33 | 1 |
内容的提问来源于stack exchange,提问作者BunnyEars
相关产品推荐
相关产品推荐

