根据列最大值重新采样时间序列数据?
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
列转换为日期时间对象并仅保留日期部分。
然后按 Date
、S_Gen
、B_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)]
也可以使用 - groupby 和 max - 只打印最后一行:
df2.sort_values('B_Gen').drop_duplicates('S_Gen', keep='last').tail(1)
我有以下数据框
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
列转换为日期时间对象并仅保留日期部分。
然后按 Date
、S_Gen
、B_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)]
也可以使用 - groupby 和 max - 只打印最后一行:
df2.sort_values('B_Gen').drop_duplicates('S_Gen', keep='last').tail(1)