Pandas DataFrame特定条件下的日期替换需求咨询
Pandas解决方案
步骤说明
- 转换日期格式:先把列B的字符串日期转为datetime类型,保证日期比较的准确性。
- 计算每个用户的最早apple日期:按用户(列A)分组,筛选出C为'apple'的记录,取每组最早的日期。
- 合并并替换日期:筛选出原始数据中C为'orange'的记录,和第一步得到的最早apple日期合并,替换orange记录的B列值。
- 可选:转回字符串格式:如果需要和原始数据格式一致,把datetime类型转回指定格式的字符串。
完整代码
import pandas as pd # 构造原始DataFrame data = { 'A': ['aaa', 'aaa', 'aaa', 'aaa', 'bbb', 'bbb', 'bbb', 'bbb'], 'B': ['01-03-2022 12:40:00', '01-03-2022 12:40:10', '01-03-2022 12:40:00', '01-03-2022 12:40:08', '15-03-2022 13:10:10', '15-03-2022 13:10:18', '15-03-2022 13:10:40', '15-03-2022 13:10:15'], 'C': ['orange', 'apple', 'kiwi', 'apple', 'orange', 'apple', 'kiwi', 'apple'] } df = pd.DataFrame(data) # 1. 转换列B为datetime类型 df['B'] = pd.to_datetime(df['B'], format='%d-%m-%Y %H:%M:%S') # 2. 计算每个用户的最早apple日期 apple_min_dates = df[df['C'] == 'apple'].groupby('A')['B'].min().reset_index(name='min_apple_date') # 3. 筛选orange记录并替换日期 result = df[df['C'] == 'orange'].merge(apple_min_dates, on='A') result['B'] = result['min_apple_date'] result = result.drop(columns='min_apple_date') # 可选:将日期转回原始字符串格式 result['B'] = result['B'].dt.strftime('%d-%m-%Y %H:%M:%S') print(result)
输出结果
A B C 0 aaa 01-03-2022 12:40:08 orange 1 bbb 15-03-2022 13:10:15 orange
内容的提问来源于stack exchange,提问作者User277883
相关产品推荐
相关产品推荐

