Преобразование (много строк -> одна строка) фрейма данных в переменные (pandas)

#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')
Затем вы можете добавить другие вычисляемые столбцы, такие как сумма суммы и так далее.