如何按Code分组,将Date相同的条目Same_Month字段更新为yes?
按Code分组后,将同一Date的条目Same_Month字段设为yes的实现方法
需求说明
按Code字段分组,当组内存在相同Date的条目时,将这些条目的Same_Month字段更新为yes;若某个Date在对应Code组内仅出现一次,则保持Same_Month为空。给定的数据框示例中,预期结果为编号4、13、14的条目Same_Month为空,其余均为yes。
实现步骤与代码
1. 统一日期格式
原始数据中Date字段存在多种格式(如2023-01-02 00:00:00、01/16/2023、26/11/2018),需先转换为标准的datetime类型,避免因格式差异导致重复判断错误:
import pandas as pd # 初始化数据框 df = pd.DataFrame([[1,'2023-01-02 00:00:00','01','2023',''], [2,'2023-01-02 00:00:00','01','2023',''], [3,'01/16/2023','01','2023',''], [4,'01/17/2023','01','2023',''], [5,'01/16/2023','01','2023',''], [6,'02/13/2023','02','2023',''], [7,'02/13/2023','02','2023',''], [8,'02/13/2023','02','2023',''], [9,'26/11/2018','11','2018',''], [10,'26/11/2018','11','2018',''], [11,'26/11/2018','11','2018',''], [12,'26/11/2018','11','2018',''], [13,'05/11/2018','11','2018',''], [14,'09/11/2018','11','2018',''], ], columns=['Number','Date','Code','year','Same_Month']) # 转换Date为datetime类型,自动识别多格式,dayfirst=True适配日/月/年格式 df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
2. 标记重复条目并更新Same_Month
这里提供两种简洁的实现方式:
方法一:使用duplicated标记重复项
利用duplicated方法,指定subset=['Code', 'Date']判断同一Code下的重复日期,keep=False会标记所有重复的条目,再将布尔值映射为yes或空字符串:
df['Same_Month'] = df.duplicated(subset=['Code', 'Date'], keep=False).map({True: 'yes', False: ''})
方法二:使用groupby+transform计算组大小
按Code和Date分组,计算每组的条目数量,当组内数量大于1时,说明存在重复日期,将对应条目设为yes:
df['Same_Month'] = df.groupby(['Code', 'Date'])['Number'].transform(lambda x: 'yes' if len(x) > 1 else '')
3. 验证结果
执行上述代码后,查看Number和Same_Month字段:
print(df[['Number', 'Same_Month']])
输出结果符合预期:
Number Same_Month 0 1 yes 1 2 yes 2 3 yes 3 4 4 5 yes 5 6 yes 6 7 yes 7 8 yes 8 9 yes 9 10 yes 10 11 yes 11 12 yes 12 13 13 14
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

