как вернуть данные в исходную форму в pandas - PullRequest
0 голосов
/ 04 мая 2020

у меня есть фрейм данных и я использовал команду pd.pivot_table(df,columns="category",index=["year","period"]) выполнил некоторую обработку данных на этом фрейме данных, и я хочу обратить процесс вспять, чтобы получить первоначальное формирование df. Я попытался с pd.melt и pd.wide_to_long без удачи. также в сводной таблице столбцы представляют собой комбинацию двух значений, что-то вроде этого: ("a", "1"), ("a", "2"), ("a", "3"), .. .., ("d", "5") где 1-я позиция - это столбцы из исходного кадра данных и 2-е значения столбца категории

исходные столбцы df:

year  period  category a  b  c  d
                 1
                 2
                 3
                 4
                 5

pivot_table :

                  |a             | b             | ... | d
        category  |1  2  3  4  5 | 1  2  3  4  5 | ... | 1  2  3  4  5 
year |  period

>

 data={"col1":[1111,1111,1111,1111,2222,2222,2222,2222], 
        "col2":["a1","a1","a1","a1","a2","a2","a2","a2"],
        "col3":[1,2,1,2,1,2,1,2],"
        "a":[555,555,555,555,555,555,555,555],
        "b":[666,666,666,666,666,666,666,666]}
df=pd.DataFrame.from_dict(data)

table=pd.pivot_table(df,columns="col3",index=["col1","col2"])

1 Ответ

0 голосов
/ 04 мая 2020

В общем случае для заданного способа построения сводной таблицы из фрейма данных два разных фрейма данных могут давать одну и ту же сводную таблицу. Так что этот процесс необратим. Например, сравните следующее с вашими df и table:

data2 = {"col1": [1111, 1111, 2222, 2222], 
         "col2": ["a1", "a1", "a2", "a2"],
         "col3": [1, 2, 1, 2],
         "a": [555, 555, 555, 555],
         "b": [666, 666, 666, 666]}
df2 = pd.DataFrame.from_dict(data2)

table2 = pd.pivot_table(df2, columns="col3", index=["col1", "col2"])

df2 отличается от вашего df, но table2 совпадает с вашим table.

Сказав, что, если вы знаете больше о фрейме данных, который вы хотите восстановить из сводной таблицы, чем это можно сделать из одной таблицы, вы можете написать пользовательскую функцию, реализующую эти знания.

Структуры двойного индекса, которые вы видите в сводных таблицах, являются экземплярами специального класса индекса в pandas, который называется MultiIndex.

...