2024-04-26 18:18:16 发布
网友
我在python中有一个pandas数据帧,由列date_time组成,列中包含日期和时间作为datetime对象,date列中包含日期作为字符串,列中包含标量度量t。我想计算每天t的累积值,然后在第二天开始时将其重置为零。有没有简单的方法?我目前正在按df.groupby('date')对数据帧进行分组。你知道吗
date_time
date
t
df.groupby('date')
重置的累计和等于将其应用于组:每个新组在开始时将重置累计和。你知道吗
用good minimal reproducible example来说明答案总是比较容易的:
df = pd.DataFrame([ ['20191224', '20191224 01:00', 50, 'Merry'], ['20191224', '20191224 02:30', 50, 'Christmas'], ['20191225', '20191225 02:00', 50, 'Merry'], ['20191225', '20191225 04:25', 50, 'Christmas'], ['20191225', '20191225 06:50', 50, ':)']], columns = ['date_str', 'date_time', 'quantity', 'msg'])
确保将“date\u time”列强制转换为实际时间戳(all time formats in documentation)
df['date_time'] = pd.to_datetime(df['date_time'], format = "%Y%m%d %H:%M")
确保您的日期是有序的(很重要,因为您将cumsum)
cumsum
df = df.sort_values('date_time')
您可以groupby date_str,因为它们代表您的日常组:
groupby date_str
df.groupby('date_str').agg({ 'quantity': 'sum', 'message': lambda x: x.join(' ') }) quantity msg date_str 20191224 100 Merry Christmas 20191225 150 Merry Christmas :)
在您的例子中,您想要的是transformcumsum:
transform
df['daily_cum_quantity'] = df.groupby('date_str')['quantity'].transform('cumsum')
导致:
date_str date_time quantity msg cum_quantity 0 20191224 2019-12-24 01:00:00 50 Merry 50 1 20191224 2019-12-24 02:30:00 50 Christmas 100 2 20191225 2019-12-25 02:00:00 50 Merry 50 3 20191225 2019-12-25 04:25:00 50 Christmas 100 4 20191225 2019-12-25 06:50:00 50 :) 150
temp = df.groupby('date')['t'].cumsum().rename('t_cumulative') df = df.merge(temp, on='date_time', how='outer')
重置的累计和等于将其应用于组:每个新组在开始时将重置累计和。你知道吗
用good minimal reproducible example来说明答案总是比较容易的:
确保将“date\u time”列强制转换为实际时间戳(all time formats in documentation)
确保您的日期是有序的(很重要,因为您将
cumsum
)您可以
groupby date_str
,因为它们代表您的日常组:在您的例子中,您想要的是
transform
cumsum
:导致:
相关问题 更多 >
编程相关推荐