gpt4 book ai didi

python - Pandas 数据框从列中减去组最小值

转载 作者:行者123 更新时间:2023-12-01 01:03:00 28 4
gpt4 key购买 nike

我有一个 pandas 数据框,用于保存某些事件的用户 ID 和日期时间。现在我想获取每个事件相对于该特定用户的第一个事件发生的相对时间。

user_id  date
A 2016-03-02 18:15:43
A 2016-01-10 17:58:57
B 2017-03-22 07:52:00
B 2017-03-27 10:41:00

我找到了一个可行的解决方案,但似乎太费力了。我相信有一种更优雅的方法可以做到这一点。

#get earliest datetime per user
start = lambda x: x.min()
start.__name__ = 'start_date'
min_dates = df.groupby('user_id').agg({'date':[start]})

#merge back to dataframe
df = df.join(min_dates.date['start_date'])

#calulate relative time
df['time_after_start'] = (df['date']-df['start_date']).apply(lambda x: x.days+x.seconds/(24*60*60))

预期结果如下

user_id  date  time_after_start                                                                   
A 2017-03-22 07:52:00 0.000000
A 2017-03-27 10:41:00 5.117361
B 2016-03-02 18:15:43 52.011644
B 2016-01-10 17:58:57 0.000000

非常感谢您的帮助!

最佳答案

使用GroupBy.transform使用 min 表示 Series ,其大小与原始 DataFrame 相同,然后按 Series.dt.total_seconds 转换 timedeltas并除以秒:

s = df.groupby('user_id')['date'].transform('min')
df['time_after_start'] = (df['date']-s).dt.total_seconds()/(24*60*60)
print (df)
user_id date time_after_start
0 A 2016-03-02 18:15:43 52.011644
1 A 2016-01-10 17:58:57 0.000000
2 B 2017-03-22 07:52:00 0.000000
3 B 2017-03-27 10:41:00 5.117361

关于python - Pandas 数据框从列中减去组最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55627778/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com