Как эффективно очистить данные панели в Python? - PullRequest
0 голосов
/ 21 января 2020

Я трансформирую данные панели. Мои исходные данные - df, и я хочу преобразовать их в df2. Price_1 означает цену в январе. Price_2 означает цену в феврале и т. Д. И вот мое решение, и мой результат в df3.

import numpy as np
import pandas as pd

df = pd.DataFrame({'item': ['a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'c', 'c'],
               'month': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
               'variable_name': ['price', 'price', 'price', 'quantity', 'quantity', 'quantity', 'price', 'price', 'price', 'quantity', 'quantity', 'quantity', 'price', 'price', 'price', 'quantity', 'quantity', 'quantity'],
               'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ,18]
               })

df2 = pd.DataFrame({'item': ['a', 'b', 'c'],
               'price_1': [1, 7, 13],
               'price_2': [2, 8, 14],
               'price_3': [3, 9, 15],
               'quantity_1': [4, 10, 16],
               'quantity_2': [5, 11, 17],
               'quantity_3': [6, 12, 18]
               })

Мои решения:

month1 = df['month'].unique()
#date1 = pd.DatetimeIndex(date1)
#month1 = date1.month
var_name = df['variable_name'].unique()
var_name2=[]

for j in var_name:
    for i in month1:
        t = j + '_' + str(i)
        var_name2.append(t)

x = df.value
index_name = df['item'].unique()
m = index_name.shape[0]
n = len(var_name2) 
df3 = pd.DataFrame(x.values.reshape(m, n), index = index_name, columns = var_name2)

Мой вопрос: в будущем данных будет намного больше (около 2 ГБ). Поэтому мне было интересно, как эффективно преобразовать данные в python? (мое решение кажется плохим). Нет необходимости быть очень эффективным, и функция в преобладающей библиотеке является предпочтительной. Спасибо.

1 Ответ

0 голосов
/ 21 января 2020
df.set_index(['item', 
              df.variable_name + '_' + df.month.apply(str)]
)['value'].unstack().reset_index()

имена столбцов, которые вы хотите, представляют собой конкатенацию variable_name и month.

, поэтому для этого установите item & выражение конкатенации в качестве индекса, unstack развернуться и, наконец, reset_index

...