首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间序列数据的Pandas Melt函数

时间序列数据的Pandas Melt函数
EN

Stack Overflow用户
提问于 2021-05-09 05:34:49
回答 3查看 167关注 0票数 2

我正在尝试融化我的pandas数据框,但我不太确定如何正确分配变量。我查看了堆栈上的其他示例,但似乎找不到与此匹配的变体。我的数据框(df1)如下所示:

代码语言:javascript
复制
[IN]: df1
[OUT]:
             40025.0    21201.0       30061.0   46021.0
date                
2020-08-08  0.000861    0.001292    0.000287    0.001177
2020-08-09  0.001147    0.001290    0.000344    0.001204
2020-08-10  0.001431    0.001288    0.000401    0.001231

每一列对应不同的FIPS代码,值是每天Covid案例的数量(此数据已被处理用于将来的集群),索引是日期时间索引( day )。数据帧是804列乘470行。我希望我的数据框看起来像这样:

我知道,如果我将"date“保留为列(而不是索引),我就可以做到这一点:

代码语言:javascript
复制
df1 =df1.melt(id_vars="date", var_name="FIPS", value_name="Covid_cases")

但是如果我这样做了,那么在尝试将"date“列转换为索引时就会出现错误。我需要它的索引是一个datetime索引,因为我要对时间序列数据进行聚类,然后绘制时间序列聚类。任何意见都将非常感谢!谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-09 05:56:25

您应该使用ignore_index=False而不是id_vars (默认情况下设置为True)。有了ignore_index=True,熊猫在取消旋转之前不会重置你的索引。

代码语言:javascript
复制
>>> df1 = df1.melt(var_name='FIPS', value_name='Cases', ignore_index=False)
>>> df1
               FIPS     Cases
date
2020-08-08  40025.0  0.000861
2020-08-09  40025.0  0.001147
2020-08-10  40025.0  0.001431
2020-08-08  21201.0  0.001292
2020-08-09  21201.0  0.001290
2020-08-10  21201.0  0.001288
2020-08-08  30061.0  0.000287
2020-08-09  30061.0  0.000344
2020-08-10  30061.0  0.000401
2020-08-08  46021.0  0.001177
2020-08-09  46021.0  0.001204
2020-08-10  46021.0  0.001231
票数 0
EN

Stack Overflow用户

发布于 2021-05-09 05:43:39

如果当前索引为date,您应该能够reset_index(),然后执行set_index('date')

代码语言:javascript
复制
df1 = (df1
    .reset_index()
    .melt(id_vars='date', var_name='FIPS', value_name='Covid_cases')
    .set_index('date')
)
代码语言:javascript
复制
               FIPS  Covid_cases
date                            
2020-08-08  40025.0     0.000861
2020-08-09  40025.0     0.001147
2020-08-10  40025.0     0.001431
2020-08-08  21201.0     0.001292
2020-08-09  21201.0     0.001290
2020-08-10  21201.0     0.001288
2020-08-08  30061.0     0.000287
2020-08-09  30061.0     0.000344
2020-08-10  30061.0     0.000401
2020-08-08  46021.0     0.001177
2020-08-09  46021.0     0.001204
2020-08-10  46021.0     0.001231
票数 1
EN

Stack Overflow用户

发布于 2021-05-09 05:50:03

或者,您可以通过stack完成此操作。

代码语言:javascript
复制
df = (
    df.stack()
    .reset_index()
    .rename(columns={'level_1': 'FIPS', 0: 'Covid_cases'})
    .set_index('date')
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67452371

复制
相关文章

相似问题

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