как отменить сводку многоколоночных данных?

#python #unpivot

#python #отменить вывод

Вопрос:

Я пытаюсь отключить столбцы и получить 1 атрибут и 2 значения из фрейма данных pandas, кто-нибудь может мне помочь в этом?

исходные данные:

  id Jan-Value1 Jan-Value2 Feb-Value1 Feb-Value2
 1  1          10         2          15
 2  0          5          3          20
  

желаемый результат:

  id Month Value1 Value2
 1  Jan   1      10
 1  Feb   2      15
 2  Jan   0      5
 2  Feb   3      20 
  

Ответ №1:

Один из возможных способов сделать это — использовать MultiIndex и stack . Для этого решения я предполагаю id , что это индекс фрейма данных:

 #df.set_index('id',inplace=True)  #set 'id' as index

#creating a Multiindex using existing columns 
df.columns = df.columns.str.split('-', expand=True).swaplevel(0,1)

#stacking the dataframe
df = df.stack().reset_index()

#renaming the column 
df.rename(columns={'level_1':'Month'},inplace=True)
print(df)
  

Вывод:

    id Month  Value1  Value2
0   1   Feb       2      15
1   1   Jan       1      10
2   2   Feb       3      20
3   2   Jan       0       5
  

Комментарии:

1. Добавлен ответ. Дайте мне знать, если это сработает для вас. Если это произойдет, пожалуйста, рассмотрите возможность принятия / проверки ответа

Ответ №2:

Вы могли бы рассмотреть pandas.wide_to_long():

 import pandas as pd

df = pd.DataFrame({
"Jan-Value1": [1, 0],
"Jan-Value2": [10, 5],
"Feb-Value1": [2, 3],
"Feb-Value2": [15,20]
})

df.columns = ["-".join(col.split("-")[::-1]) for col in df.columns]

df["id"] = df.index

transformed_df = pd.wide_to_long(df, ["Value1", "Value2"], i="id", j="Month", sep="-", suffix="w ")
  

Поскольку pandas требует, чтобы суффикс заканчивался значением столбца, я в итоге изменил порядок имен ваших столбцов (без этого преобразования значения 1 и значения2 оказались в столбце месяцы)