获取pandas df中所有周期的最大值和最大值发生的时间



我有一个熊猫数据框架,它看起来像这样:

Concentr 1  Concentr 2     Time
0    25.4        0.48       00:01:00
1    26.5        0.49       00:02:00
2    25.2        0.52       00:03:00
3    23.7        0.49       00:04:00
4    23.8        0.55       00:05:00
5    24.6        0.53       00:06:00
6    26.3        0.57       00:07:00
7    27.1        0.59       00:08:00
8    28.8        0.56       00:09:00
9    23.9        0.54       00:10:00
10   25.6        0.49       00:11:00
11   27.5        0.56       00:12:00
12   26.3        0.55       00:13:00
13   25.3        0.54       00:14:00

,我想保留每5分钟间隔的浓度1的最大值,以及它发生的时间和当时浓度2的值。因此,对于前面的例子,我希望有:

Concentr 1    Concentr 2     Time
0     26.5          0.49       00:02:00
1     28.8          0.56       00:09:00
2     27.5          0.56       00:12:00

我目前的方法是i)为每个5分钟间隔创建一个ID的辅助变量,例如00:00到00:05将是间隔1,从00:05到00:10将是间隔2等,ii)在一个组中使用间隔变量来获得每个间隔的最大浓度1,iii)合并回初始df使用间隔变量和浓度1,从而识别相应的时间。

我想问是否有更好/更有效/更优雅的方法来做这件事。

非常感谢你的帮助。

您可以执行常规的重新抽样/分组,并使用idxmax方法获得每个组所需的行。然后用它来索引原始数据:

>>> df.loc[df.resample('5T', on='Time')['Concentr1'].idxmax()]
Concentr 1  Concentr 2                Time
1         26.5        0.49 2021-10-09 00:02:00
8         28.8        0.56 2021-10-09 00:09:00
11        27.5        0.56 2021-10-09 00:12:00

这是假设您的'Time'列与pd.to_datetime类似的日期时间。您可以使用strftime将时间列转换回来。完整的:

df['Time'] = pd.to_datetime(df['Time'])
result = df.loc[df.resample('5T', on='Time')['Concentr1'].idxmax()]
result['Time'] = result['Time'].dt.strftime('%H:%M:%S')

给:

Concentr1  Concentr2      Time
1        26.5       0.49  00:02:00
8        28.8       0.56  00:09:00
11       27.5       0.56  00:12:00
df = df.set_index('Time')
idx = df.resample('5T').agg({'Concentr 1': np.argmax})
df = df.iloc[idx.conc]

那么你可能需要reset_index(),如果你不希望时间作为你的索引。

你也可以这样使用:

groupby everyn=5根据" concentration 1">

的max索引对原始df进行缩小和过滤。
df = df[df.index.isin(df.groupby(df.index // 5)["Concentr 1"].idxmax())]
print(df)

输出:

Concentr 1  Concentr 2      Time
1         26.5        0.49  00:02:00
8         28.8        0.56  00:09:00
11        27.5        0.56  00:12:00

相关内容

  • 没有找到相关文章

最新更新