【问题标题】:Concatenate all dataframe columns into a single column将所有数据框列连接成一列
【发布时间】:2019-05-22 17:13:27
【问题描述】:

我有一个大致如下的数据框:

        01/01/19 02/01/19 03/01/19 04/01/19
hour                                                                           
1.0     27.08    47.73    54.24    10.0 
2.0     26.06    49.53    46.09    22.0
...
24.0    12.0     34.0     22.0     40.0

我想将其维度减少为单个列,并使用适当的日期索引连接所有列。有没有聪明的 pandas 方法呢?

预期结果...类似于:

01/01/19 00:00:00   27.08
01/01/19 01:00:00   26.08
...
01/01/19 23:00:00   12.00
02/01/19 00:00:00   47.73
02/01/19 01:00:00   49.53
...
02/01/19 23:00:00   34.00
...

【问题讨论】:

  • 请添加预期输出。
  • 什么是正确的日期索引?连接后小时索引会发生什么变化?
  • @Erfan 更新了问题
  • @cs95 小时进入日期时间索引,我有一个包含日期列和小时行的网格,我想要一个带有完整时间戳索引及其值的列

标签: python pandas datetime time-series concatenation


【解决方案1】:

您可以使用pd.to_datetimepd.to_timedelta 堆叠然后修复索引:

u = df.stack()  
u.index = (pd.to_datetime(u.index.get_level_values(1), dayfirst=True) 
         + pd.to_timedelta(u.index.get_level_values(0) - 1, unit='h'))

u.sort_index()

2019-01-01 00:00:00    27.08
2019-01-01 01:00:00    26.06
2019-01-01 23:00:00    12.00
2019-01-02 00:00:00    47.73
2019-01-02 01:00:00    49.53
2019-01-02 23:00:00    34.00
2019-01-03 00:00:00    54.24
2019-01-03 01:00:00    46.09
2019-01-03 23:00:00    22.00
2019-01-04 00:00:00    10.00
2019-01-04 01:00:00    22.00
2019-01-04 23:00:00    40.00
dtype: float64

【讨论】:

  • 面包和黄油一段代码,试图用melt解决这个问题
  • @Erfan Melt 是一个选项,但小时索引会丢失。所以我决定使用堆栈来很好地排列索引和列:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多