我有一个简单的数据框,看起来像这样:
TimeStamp, Value
1-Jan 06:10, 5
1-Jan 08:15, 7
1-Jan 15:30, 3
2-Jan 07:05, 1
2-Jan 10:15, 3
2-Jan 13:30, 2
如何将第三列添加到同一数据帧中,以显示每天“value”的运行最大值,并在第二天重置?我希望数据框看起来像这样:
TimeStamp, Value, DayMax
1-Jan 06:10, 5, 7
1-Jan 08:15, 7, 7
1-Jan 15:30, 3, 7
2-Jan 07:05, 1, 3
2-Jan 10:15, 3, 3
2-Jan 13:30, 2, 3
我尝试使用
.rolling().max(...)
但问题是,即使在前面的行中,在遇到最大值之前,以及在达到min_periods
之前,我都需要最大值。另外,我需要每天重置max,从而忽略window
参数。我希望避免循环和复杂的代码操作,因为我将在一个非常大的数据帧上这样做,所以我更希望有一些内置的东西!
最佳答案
如果使用to_datetime
将TimeStamp列转换为datetime,则可以在日期上groupby
并调用transform
返回每天的最大值序列:
In [54]:
df['TimeStamp'] = pd.to_datetime(df['TimeStamp'], format='%d-%b %H:%M')
df
Out[54]:
TimeStamp Value
0 1900-01-01 06:10:00 5
1 1900-01-01 08:15:00 7
2 1900-01-01 15:30:00 3
3 1900-01-02 07:05:00 1
4 1900-01-02 10:15:00 3
5 1900-01-02 13:30:00 2
In [55]:
df['DayMax'] = df.groupby(df['TimeStamp'].dt.date)['Value'].transform('max')
df
Out[55]:
TimeStamp Value DayMax
0 1900-01-01 06:10:00 5 7
1 1900-01-01 08:15:00 7 7
2 1900-01-01 15:30:00 3 7
3 1900-01-02 07:05:00 1 3
4 1900-01-02 10:15:00 3 3
5 1900-01-02 13:30:00 2 3
关于python - 每天在DataFrame中创建一个正在运行的max列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41956467/