根据列最大值重新采样时间序列数据?

Resample time series data based on a column maximum value?

我有以下数据框

Date              A_Gen  A_Load  B_Gen  B_Load  S_Gen
2010-01-01 00:00     30      20     40      40     70
2010-01-01 01:00     45      25     35      30     70
2010-01-01 02:00     25      22     30      25     55

我想要的是 'Daily Resample' 基于最大值 'S_Gen' 如果有 'repeated' 值则基于 'B-Gen' 预期输出:

Date       A_Gen  A_Load  B_Gen  B_Load  S_Gen
2010-01-01 45     25      35     30       70
df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = df['Date'].dt.date

df = df.sort_values(['Date', 'S_Gen', 'B_Gen'], ascending=[True, False, False])

df = df.drop_duplicates('Date')
# print(df)

         Date  A_Gen  A_Load  B_Gen  B_Load  S_Gen
1  2010-01-01     45      25     40      30     70

前两行将 Date 列转换为日期时间对象并仅保留日期部分。

然后按 DateS_GenB_Gen 列对数据帧进行排序,我们希望 Date 列升序,S_Gen 列降序B_Gen 列降序排列。

最后我们只保留第一个基于列 Date 的重复项。

添加数据框:

df2 = pd.DataFrame(np.array([[1, 2], [4, 5], [7, 8], [9, 10], [7, 10]]),
                   columns=['B_Gen', 'S_Gen',])

打印S_Gen中的最大值:

df2.iloc[df2['S_Gen'].argmax()]

打印重复值:

duplicates = df2[df2.duplicated(subset=['S_Gen'], keep=False)]

也可以使用 - groupbymax - 只打印最后一行:

df2.sort_values('B_Gen').drop_duplicates('S_Gen', keep='last').tail(1)