python - 将 pandas DataFrame reshape 为堆叠/记录/数据库/长格式

标签 python pandas dataframe scientific-computing

将 pandas DataFrame 从宽格式转换为堆叠/记录/数据库/长格式的最佳方法是什么?

这是一个小代码示例:

宽幅:

date        hour1  hour2  hour3  hour4
2012-12-31   9.18  -0.10  -7.00 -64.92
2012-12-30  13.91   0.09  -0.96   0.08
2012-12-29  12.97  11.82  11.65  10.20
2012-12-28  22.01  16.04  15.68  11.67
2012-12-27  11.44   0.07 -19.97 -67.98
...

堆叠/记录/数据库/长格式(需要):

date                  hour                   price
2012-12-31 00:00:00   hour1                   9.18
2012-12-31 00:00:00   hour2                   -0.1
2012-12-31 00:00:00   hour3                     -7
2012-12-31 00:00:00   hour4                 -64.92
...
2012-12-30 00:00:00   hour1                   7.18
2012-12-30 00:00:00   hour2                   -1.1
2012-12-30 00:00:00   hour3                     -9
2012-12-30 00:00:00   hour4                 -74.91
...

最佳答案

您可以使用 melt将 DataFrame 从宽格式转换为长格式:

import pandas as pd
df = pd.DataFrame({'date': ['2012-12-31', '2012-12-30', '2012-12-29', '2012-12-28', '2012-12-27'],
                   'hour1': [9.18, 13.91, 12.97, 22.01, 11.44],
                   'hour2': [-0.1, 0.09, 11.82, 16.04, 0.07]})
print pd.melt(df, id_vars=['date'], value_vars=['hour1', 'hour2'], var_name='hour', value_name='price')

输出:

         date   hour  price
0  2012-12-31  hour1   9.18
1  2012-12-30  hour1  13.91
2  2012-12-29  hour1  12.97
3  2012-12-28  hour1  22.01
4  2012-12-27  hour1  11.44
5  2012-12-31  hour2  -0.10
6  2012-12-30  hour2   0.09
7  2012-12-29  hour2  11.82
8  2012-12-28  hour2  16.04
9  2012-12-27  hour2   0.07

关于python - 将 pandas DataFrame reshape 为堆叠/记录/数据库/长格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744276/

相关文章:

python - 使用 Python 3 的 Django SimpleUploadedFile

python - 在 Windows 8、python 3.3 中创建虚拟环境时遇到问题

python - 如何根据条件从另一个数据帧更新数据帧值

python - Pandas 列名称有两个级别

python - 在 Pandas 中重新格式化数据框

python - 使用 apply 函数 pandas 更正日期

Python 在类定义之外覆盖 __str__

python - 如何使用 python 中的假期模块列出每个国家/地区的所有假期日期?

python - 如何根据公式从单行创建多行?

python - Pandas 数据框获取掩码列零(0)之间的所有行,并获取每组的第一行和最后一行