首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过在行中选择日期时间值来转置Pandas DataFrame

问通过在行中选择日期时间值来转置Pandas DataFrame
EN

Stack Overflow用户
提问于 2017-02-01 07:29:49
回答 2查看 1.4K关注 0票数 1

我有一个简单的Pandas DataFrame,看起来像这样:

代码语言:javascript
复制
Timestamp              Value
2017-01-03 00:00:00    13.05
2017-01-03 00:01:00    13.70
2017-01-03 00:02:00    13.07
...
2017-01-27 09:57:00    13.46
2017-01-27 09:58:00    13.43
2017-01-27 09:59:00    13.41

如何将其转置为每天只有一行,以及特定小时和分钟的列(例如,从0到10小时)(时间戳中没有秒,它们都是零)。

到目前为止,我可以成功地使用df[df.index.time < datetime.time(10,0)]选择每天小于10小时的行,但是如果我随后执行.T来转置该选择,那么整个DataFrame将转置为一个很长的行。对于时间戳中每个不同日期,如何对成批的行执行.T操作?(还有可能将每一天的值放在转置数据集的第一列中?

我宁愿避免自定义代码和循环,因为数据集很大,所以内置的东西更好!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-01 07:35:32

将索引设置为由日期、时间和unstack组成的多个索引

代码语言:javascript
复制
df.set_index(
    [df.Timestamp.dt.date, df.Timestamp.dt.time]
).Value.rename_axis([None] * 2).unstack()

​

​

票数 5
EN

Stack Overflow用户

发布于 2017-02-01 07:39:06

您可以使用pivot_table方法:

代码语言:javascript
复制
In [214]: df.assign(d=df.Timestamp.dt.date, t=df.Timestamp.dt.time) \
            .pivot_table(index='d', columns='t', values='Value', fill_value=0) \
            .rename_axis(None, 1)
Out[214]:
            00:00:00  00:01:00  00:02:00  09:57:00  09:58:00  09:59:00
2017-01-03     13.05      13.7     13.07      0.00      0.00      0.00
2017-01-27      0.00       0.0      0.00     13.46     13.43     13.41

另外,我更喜欢@piRSquared的解决方案,因为它更优雅……

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41969382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档