Pandas按1秒间隔对行进行分组,然后查找最高/最低/最早/最后一个值

ftf50wuq  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(169)

我有一个从csv文件读取的 Dataframe 。类似这样的东西:
| 时间戳|价格|
| - ------| - ------|
| 2022年8月1日09时30分00秒005037|一百五十万一千四百零五千元|
| 2022年8月1日09时30分00秒005038| 155.405千元|
| 2022年8月1日09时30分00秒005040| 153 405 000美元|
| 2022年8月1日09时31分00秒00秒5000秒|16140万5千|
| 2022年8月1日09时31分00秒006038| 165,405,000欧元|
| 2022年8月1日09时31分00秒007038秒|163 405 000美元|
理想的结果是按1秒分组,并查找最低的higest、最早的和最后的值
| 时间戳|最低价格|最高价格|最早_价格|最新价格|
| - ------| - ------| - ------| - ------| - ------|
| 2022年8月1日09时30分00秒|一百五十万一千四百零五千元|155.405千元|一百五十万一千四百零五千元|153 405 000美元|
| 2022年8月1日09时31分00万|16140万5千|165,405,000欧元|16140万5千|163 405 000美元|
我使用过:

df.resample('1S').agg(['min','max', 'first', 'last'])

但是我总是遇到索引错误,而且我不知道如何在数据框中添加一个新的列。可以通过函数实现吗?

b09cbbtk

b09cbbtk1#

使用pandas.Grouper对象和管理列索引:

df.groupby(pd.Grouper(key='TIMESTAMP', freq='1S')).agg(['min','max', 'first', 'last'])\
    .dropna().droplevel(0, axis=1)\
    .rename(columns={'min': 'LOWEST_PRICE','max': 'HIGHEST_PRICE',
                     'first': 'EARLIEST_PRICE', 'last':'LAST_PRICE'}).reset_index()

print(df)

输出:

TIMESTAMP  LOWEST_PRICE  HIGHEST_PRICE  EARLIEST_PRICE  LAST_PRICE
0 2022-08-01 09:30:00       151.405        155.405         151.405     153.405
1 2022-08-01 09:31:00       161.405        165.405         161.405     163.405

相关问题