Вставьте столбцы в первую очередь таблицы двойных записей в Python - PullRequest
0 голосов
/ 14 октября 2019

Итак, я получил таблицу, которую хотел изменить, с помощью df.pivot_table() моего фрейма данных и получил что-то вроде этого:

Фрейм данных

Но теперь я хочу связать этистанции их широту и долготу значения. Это столбцы, которые у меня есть в другом кадре данных, и я подумал, что хороший способ сделать это - поместить эти переменные перед столбцом станции (latlon) в этом кадре данных.

Я попытался использовать df.insert(), но, указав loc = 0, удаляю мой фрейм данных.

Есть ли способ сделать это? Или я должен связать их через индексацию или что-то в этом роде? Может быть, есть более простой способ визуализировать то, что я хочу, в моем уме, но я понятия не имею.

Date    2009-01-01 00:00:00     2009-01-02 00:00:00     2009-01-03 00:00:00
latlon                                                                                  
321332106443701     20.40   20.33   20.30   
321332106443703     19.17   19.16   19.16   
321540110205501     10.99   10.97   10.98   
321540110205502     10.00   9.99    9.99     

И я хочу добавить следующее:

latdeg londeg 32.225583 -64.736139 32.225583 -64.736139 32.225583 -64.736139 32.225583 -64.736139

Обновление: Я получил первую таблицу из набора данных, используя: df = old_df.pivot_table('DepthBLS', ['latlon'], 'Date')

Таким образом, моя проблема также была решена путем создания этого с самого начала: df = old_df.pivot_table('DepthBLS', ['latlon','latdeg','londeg'], 'Date')

и не нужно переиндексировать. Извините, теперь я вижу, это было глупо! Но ответ, который я получил, был очень полезен в случае, если у меня есть таблица с двойной записью и нет исходных данных для работы.

1 Ответ

0 голосов
/ 14 октября 2019

Что касается ошибки, получаемой с помощью df.insert(), функция не возвращает (т. Е. Возвращает None), и если вы присваиваете фрейм данных, используя df = df.insert(...), это может быть источником проблемы. Вместо этого пропустите задание и просто используйте df.insert(...).

Если у вас все еще есть проблемы, есть другие способы добиться этого. Если у вас есть столбцы latdeg и londeg в отдельном фрейме данных, который выровнен с этим, вы можете добавить их с помощью следующего (где latlondf - ваш второй фрейм данных, используя .values для игнорирования индексов):

df['latdeg'] = latlondf['latdeg'].values
df['londeg'] = latlondf['londeg'].values

По умолчанию эти столбцы отображаются справа от вашего кадра данных, но вы можете перенести их слева от кадра, используя df.reindex():

df = df.reindex(
    columns=["latdeg", "londeg"]
    + [i for i in df.columns if i not in ["latdeg", "londeg"]]
)

Репликация данных. и расширив некоторые:

import pandas as pd
import numpy as np

# replicate the dataframes

df = pd.DataFrame(
    [
        [20.40, 20.33, 20.30],
        [19.17, 19.16, 19.1],
        [10.99, 10.97, 10.98],
        [10.00, 9.99, 9.99],
    ],
    columns=["2009-01-01 00:00:00", "2009-01-02 00:00:00", "2009-01-03 00:00:00"],
    index=[321332106443701, 321332106443703, 321540110205501, 321540110205502],
)

latlondf = pd.DataFrame(
    [
        [32.225583, -64.736139],
        [32.225583, -64.736139],
        [32.225583, -64.736139],
        [32.225583, -64.736139],
    ],
    columns=["latdeg", "londeg"],
)

df.columns.name = "Date"
df.index.name = "latlon"

# Options 1: insert

df.insert(0, "latdeg", latlondf["latdeg"].values)
df.insert(1, "londeg", latlondf["londeg"].values)

# Option 2 - assign and reindex
df["latdeg"] = latlondf["latdeg"].values
df["londeg"] = latlondf["londeg"].values


df = df.reindex(
    columns=["latdeg", "londeg"]
    + [i for i in df.columns if i not in ["latdeg", "londeg"]]
)

# check output

df
Date    latdeg  londeg  2009-01-01 00:00:00 2009-01-02 00:00:00 2009-01-03 00:00:00
latlon                  
321332106443701 32.225583   -64.736139  20.40   20.33   20.30
321332106443703 32.225583   -64.736139  19.17   19.16   19.10
321540110205501 32.225583   -64.736139  10.99   10.97   10.98
321540110205502 32.225583   -64.736139  10.00   9.99    9.99
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...