Преобразуйте мультииндексный фрейм данных pandas в простой фрейм данных со всем индексом в столбцах. - PullRequest
1 голос
/ 20 октября 2019

Извиняюсь за изображение, но я не уверен, как воспроизвести это, поскольку мне дали эти данные ...

Multi index dataframe

Я просто хочучтобы преобразовать это в простой фрейм данных, где у меня есть индексные столбцы time, lon, lat и значения в соответствующих строках, например, так:

| time | lat | lon | data |

Я попытался сделать .reset_index (), ноtime ось все еще идет поперек, а не вниз. Как я могу «взорвать» все значения индекса, чтобы получить простой фрейм данных со всем индексом в столбцах?

Редактировать:

Словарь тестовых данных для воспроизведения:

{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}}

1 Ответ

3 голосов
/ 20 октября 2019

Проверьте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...