我正在尝试融化我的pandas数据框,但我不太确定如何正确分配变量。我查看了堆栈上的其他示例,但似乎找不到与此匹配的变体。我的数据框(df1)如下所示:
[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“保留为列(而不是索引),我就可以做到这一点:
df1 =df1.melt(id_vars="date", var_name="FIPS", value_name="Covid_cases")但是如果我这样做了,那么在尝试将"date“列转换为索引时就会出现错误。我需要它的索引是一个datetime索引,因为我要对时间序列数据进行聚类,然后绘制时间序列聚类。任何意见都将非常感谢!谢谢!
发布于 2021-05-09 05:56:25
您应该使用ignore_index=False而不是id_vars (默认情况下设置为True)。有了ignore_index=True,熊猫在取消旋转之前不会重置你的索引。
>>> 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发布于 2021-05-09 05:43:39
如果当前索引为date,您应该能够reset_index(),然后执行set_index('date'):
df1 = (df1
.reset_index()
.melt(id_vars='date', var_name='FIPS', value_name='Covid_cases')
.set_index('date')
) 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发布于 2021-05-09 05:50:03
或者,您可以通过stack完成此操作。
df = (
df.stack()
.reset_index()
.rename(columns={'level_1': 'FIPS', 0: 'Covid_cases'})
.set_index('date')
)https://stackoverflow.com/questions/67452371
复制相似问题