📜  pandas resample groupby - Python (1)

📅  最后修改于: 2023-12-03 15:18:14.096000             🧑  作者: Mango

pandas resample groupby - Python

在数据处理和分析中,经常需要对时间序列数据进行 resample 和 groupby 操作。pandas 库是一个非常强大的数据处理工具,提供了便捷的 API 来完成这些操作。

Resample

resample 操作常常用来将数据按照时间间隔进行聚合,比如从秒级别聚合到分钟或小时级别。我们可以使用 resample 方法来实现:

import pandas as pd
import numpy as np

# 创建时间序列数据
dates = pd.date_range(start='2021-01-01', end='2021-01-05', freq='30S')
ts = pd.Series(np.random.randn(len(dates)), index=dates)

# 将数据按照5分钟进行聚合
ts_resampled = ts.resample('5T').mean()

print(ts_resampled)

上述代码会将原始数据按照 5 分钟聚合,然后取每个时间段的平均值。输出的结果类似这样:

2021-01-01 00:00:00    0.067714
2021-01-01 00:05:00    0.126600
2021-01-01 00:10:00    0.316078
2021-01-01 00:15:00    0.223077
2021-01-01 00:20:00    0.080502
2021-01-01 00:25:00   -0.162372
2021-01-01 00:30:00   -0.047742
2021-01-01 00:35:00   -0.639693
2021-01-01 00:40:00   -0.005851
2021-01-01 00:45:00    0.420532
2021-01-01 00:50:00   -0.021539
2021-01-01 00:55:00   -0.117413
2021-01-01 01:00:00   -0.025188
2021-01-01 01:05:00   -0.231959
2021-01-01 01:10:00    0.428924
2021-01-01 01:15:00    0.253950
2021-01-01 01:20:00    0.378106
2021-01-01 01:25:00   -0.097333
2021-01-01 01:30:00   -0.024777
2021-01-01 01:35:00    0.032020
2021-01-01 01:40:00    0.383841
2021-01-01 01:45:00    0.386238
2021-01-01 01:50:00    0.399712
2021-01-01 01:55:00    0.053159
2021-01-01 02:00:00    0.037129
2021-01-01 02:05:00   -0.599510
2021-01-01 02:10:00    0.173186
2021-01-01 02:15:00    0.216552
Freq: 5T, dtype: float64
Groupby

groupby 操作常常用来将数据按照某个标准进行分组,然后对每个分组进行一些统计操作。我们可以使用 groupby 方法来实现:

import pandas as pd
import numpy as np

# 创建 DataFrame 数据
df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data': [1, 2, 3, 4, 5, 6]
})

# 按照 key 列进行分组,然后统计每组的平均值
df_grouped = df.groupby('key').mean()

print(df_grouped)

上述代码会将原始数据按照 key 列进行分组,然后求出每个分组的平均值。输出的结果类似这样:

     data
key      
A     2.5
B     3.5
C     4.5

在实际使用中,我们常常需要同时进行 resample 和 groupby 操作。这时可以先通过 groupby 将数据分组,然后对每个分组进行 resample,最后再将分组的结果合并到一起。这个过程非常灵活,可以根据不同的需求进行组合。

Markdown格式:在开头加上'#'作为一级标题,其他采用正常的markdown格式编写即可。