#python #pandas #dataframe #row #one-hot-encoding
#python #панды #фрейм данных #строка #одно-горячее кодирование
Вопрос:
У меня есть фрейм данных, который содержит много строк.
Как я могу сделать этот верхний фрейм данных, как показано ниже, который имеет одну строку.
import pandas as pd
# source dataframe
df_source = pd.DataFrame({
'ID': ['A01', 'A01'],
'Code': ['101', '102'],
'amount for code': [10000, 20000],
'count for code': [4, 3]
})
# target dataframe
df_target = pd.DataFrame({
'ID': ['A01'],
'Code101': [1],
'Code102': [1],
'Code103': [0],
'amount for code101': [10000],
'count for code101': [4],
'amount for code102': [20000],
'count for code102': [3],
'amount for code103': [None],
'count for code103': [None],
'count for code': [None],
'sum of amount': [30000],
'sum of count': [7]
})
Я пытался использовать метод ‘get.dummies’, но его можно использовать только для того, был этот код или нет.
Как я могу обработать фрейм данных, чтобы создать свой набор данных?
Комментарии:
1. Добавлен код для ваших фреймов данных. Пожалуйста, проверьте структуру.
2. У вас есть только коды 101,102,103?
Ответ №1:
Вы можете перебирать строки вашего существующего фрейма данных и заполнять (используя .at или .loc) ваш новый фрейм данных (df2). df2 будет иметь идентификатор индекса, который теперь уникален.
import pandas as pd
df = pd.DataFrame({
'ID': ['A01', 'A01'],
'Code': ['101', '102'],
'amount for code': [10000, 20000],
'count for code': [4, 3]
})
df2 = pd.DataFrame()
for idx, row in df.iterrows():
for col in df.columns:
if col !='ID' and col !='Code':
df2.at[row['ID'],col row['Code']]=row[col]
Ответ №2:
Вы можете использовать сводную таблицу:
df_result = df.pivot_table(index='ID', columns='Code', values=['amount for code', 'amount for code'])
Это вернет фрейм данных с многоуровневым индексом столбца, например ('101', 'amount for code')
Затем вы можете добавить другие вычисляемые столбцы, такие как сумма суммы и так далее.