Pandas 将多索引数据框转换为所有索引都在列中的简单数据框

Pandas 将多索引数据框转换为所有索引都在列中的简单数据框,pandas,Pandas,我为这张照片道歉,但我不知道如何重现这张照片,因为我得到了这些数据 我只想将其转换为一个简单的数据帧,其中有索引列time,lon,lat,以及相应行中的值,如下所示: | time | lat | lon | data | 我尝试过这样做。reset_index(),但是时间轴仍然是横轴,而不是向下。如何“分解”所有索引值以获得一个简单的数据帧,其中所有索引都在列中 编辑: 用于复制的测试数据字典: {Timestamp('2001-01-01 00:00:00'): {(50.18000

我为这张照片道歉,但我不知道如何重现这张照片,因为我得到了这些数据

我只想将其转换为一个简单的数据帧,其中有索引列
time
lon
lat
,以及相应行中的值,如下所示:

| time | lat | lon | data |
我尝试过这样做。reset_index(),但是
时间轴仍然是横轴,而不是向下。如何“分解”所有索引值以获得一个简单的数据帧,其中所有索引都在列中

编辑:

用于复制的测试数据字典:

{Timestamp('2001-01-01 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.68,
  (50.18000030517578, -4.9200439453125): -1.88,
  (50.18000030517578, -4.219970703125): -2.08},
 Timestamp('2001-01-02 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.95,
  (50.18000030517578, -4.9200439453125): -2.25,
  (50.18000030517578, -4.219970703125): -2.55},
 Timestamp('2001-01-03 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -0.76,
  (50.18000030517578, -4.9200439453125): -0.91,
  (50.18000030517578, -4.219970703125): -1.06},
 Timestamp('2001-01-04 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.9,
  (50.18000030517578, -4.9200439453125): -3.01,
  (50.18000030517578, -4.219970703125): -3.11},
 Timestamp('2001-01-05 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.06,
  (50.18000030517578, -4.9200439453125): -2.29,
  (50.18000030517578, -4.219970703125): -2.52}}
选中此项:

import pandas as pd
from pandas import Timestamp


d = {Timestamp('2001-01-01 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.68,
  (50.18000030517578, -4.9200439453125): -1.88,
  (50.18000030517578, -4.219970703125): -2.08},
 Timestamp('2001-01-02 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.95,
  (50.18000030517578, -4.9200439453125): -2.25,
  (50.18000030517578, -4.219970703125): -2.55},
 Timestamp('2001-01-03 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -0.76,
  (50.18000030517578, -4.9200439453125): -0.91,
  (50.18000030517578, -4.219970703125): -1.06},
 Timestamp('2001-01-04 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.9,
  (50.18000030517578, -4.9200439453125): -3.01,
  (50.18000030517578, -4.219970703125): -3.11},
 Timestamp('2001-01-05 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.06,
  (50.18000030517578, -4.9200439453125): -2.29,
  (50.18000030517578, -4.219970703125): -2.52}}


df = pd.DataFrame(d)
df = df.stack().to_frame().reset_index()
df.columns = ['lat', 'lon', 'time', 'data']
输出:

      lat       lon       time  data
0   50.18 -5.619995 2001-01-01 -1.68
1   50.18 -5.619995 2001-01-02 -1.95
2   50.18 -5.619995 2001-01-03 -0.76
3   50.18 -5.619995 2001-01-04 -2.90
4   50.18 -5.619995 2001-01-05 -2.06
5   50.18 -4.920044 2001-01-01 -1.88
6   50.18 -4.920044 2001-01-02 -2.25
7   50.18 -4.920044 2001-01-03 -0.91
8   50.18 -4.920044 2001-01-04 -3.01
9   50.18 -4.920044 2001-01-05 -2.29
10  50.18 -4.219971 2001-01-01 -2.08
11  50.18 -4.219971 2001-01-02 -2.55
12  50.18 -4.219971 2001-01-03 -1.06
13  50.18 -4.219971 2001-01-04 -3.11
14  50.18 -4.219971 2001-01-05 -2.52
选中此项:

import pandas as pd
from pandas import Timestamp


d = {Timestamp('2001-01-01 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.68,
  (50.18000030517578, -4.9200439453125): -1.88,
  (50.18000030517578, -4.219970703125): -2.08},
 Timestamp('2001-01-02 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -1.95,
  (50.18000030517578, -4.9200439453125): -2.25,
  (50.18000030517578, -4.219970703125): -2.55},
 Timestamp('2001-01-03 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -0.76,
  (50.18000030517578, -4.9200439453125): -0.91,
  (50.18000030517578, -4.219970703125): -1.06},
 Timestamp('2001-01-04 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.9,
  (50.18000030517578, -4.9200439453125): -3.01,
  (50.18000030517578, -4.219970703125): -3.11},
 Timestamp('2001-01-05 00:00:00'): {(50.18000030517578,
   -5.6199951171875): -2.06,
  (50.18000030517578, -4.9200439453125): -2.29,
  (50.18000030517578, -4.219970703125): -2.52}}


df = pd.DataFrame(d)
df = df.stack().to_frame().reset_index()
df.columns = ['lat', 'lon', 'time', 'data']
输出:

      lat       lon       time  data
0   50.18 -5.619995 2001-01-01 -1.68
1   50.18 -5.619995 2001-01-02 -1.95
2   50.18 -5.619995 2001-01-03 -0.76
3   50.18 -5.619995 2001-01-04 -2.90
4   50.18 -5.619995 2001-01-05 -2.06
5   50.18 -4.920044 2001-01-01 -1.88
6   50.18 -4.920044 2001-01-02 -2.25
7   50.18 -4.920044 2001-01-03 -0.91
8   50.18 -4.920044 2001-01-04 -3.01
9   50.18 -4.920044 2001-01-05 -2.29
10  50.18 -4.219971 2001-01-01 -2.08
11  50.18 -4.219971 2001-01-02 -2.55
12  50.18 -4.219971 2001-01-03 -1.06
13  50.18 -4.219971 2001-01-04 -3.11
14  50.18 -4.219971 2001-01-05 -2.52

打印
df.head(5).to_dict()
的结果,从这里我可以
pd.DataFrame(…)
编辑-尽管我无法确定如何保存索引名(to_dict()自动删除它们(?)-感谢您提供的帮助。我添加了解决方案。打印
df.head(5)的结果。从这里我可以
pd.DataFrame()to_dict()
(…)
Edited-虽然我无法确定如何保留索引名(to_dict()自动删除它们(?)-感谢您提供的帮助。我添加了解决方案建议。
.stack()
似乎是我想要的平展行索引!谢谢。有一件事需要改进:列名称处理,它应该更自动地完成;-)
.stack()
似乎是我想要的平展行索引!谢谢。有一件事需要改进:列名处理,它应该更自动地完成;-)