#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 оказались в столбце месяцы)