如何基于Date列对DataFrame按月份对name列去重获取唯一行
实现方案
你可以直接用pandas内置的drop_duplicates方法实现需求,核心逻辑是把日期的年月维度和name列共同作为去重的判断条件:
完整代码
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ 'Date': ['2015-01-02', '2015-02-02', '2015-02-02', '2015-03-02', '2015-03-02', '2015-03-02'], 'name': ['Adam', 'David', 'Adam', 'David', 'Hardik', 'David'], 'Age': [1, 2, 2, 2, 2, 3] }) # 先把Date列转为datetime类型,方便提取月份 df['Date'] = pd.to_datetime(df['Date']) # 按「年月+姓名」去重,保留第一次出现的行 df_result = df.drop_duplicates( subset = [df['Date'].dt.to_period('M'), 'name'], keep = 'first' ) # 如果需要Date列保持原字符串格式,可加下面这行 df_result['Date'] = df_result['Date'].dt.strftime('%Y-%m-%d') print(df_result)
代码说明
df['Date'].dt.to_period('M')会将日期转换为「年-月」格式的周期值,用来区分不同月份subset参数指定了去重的判断规则:同一个月份下出现的同名用户,就会被判定为重复行keep='first'表示保留重复行里第一次出现的记录,和你给出的预期输出完全一致
输出结果
Date name Age 0 2015-01-02 Adam 1 1 2015-02-02 David 2 2 2015-02-02 Adam 2 3 2015-03-02 David 2 4 2015-03-02 Hardik 2
内容的提问来源于stack exchange,提问作者Sriram。
相关产品推荐
相关产品推荐

