Преобразование кадра данных панд при создании новых столбцов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть pandas dataframe df, значения которого следующие:

HE  PR  MastLoc Loc     Type    Qty
1   2   E1      LocA    TC      3
2   23  E1      LocA    TB      18
3   17  E1      LocA    TC      11
3   2   E1      LocB    TC      3
24  3   E1      LocB    TB      4

Я хочу создать следующий фрейм данных df из указанного выше фрейма данных:

MastLoc Loc     Type    Qty1    PR1   Qty2  PR2   Qty3  PR3  Qty24  PR24
E1      LocA    TC      3       2                 11    17      
E1      LocA    TB                    18    23              
E1      LocB    TC                                3     2       
E1      LocB    TB                                            4      3

Новые столбцы создаются путем объединения имен столбцов Qty и PR с целочисленными значениями в столбце HE (столбец HE всегда имеет целочисленные значения).

df2 в основном содержит строки с уникальной комбинацией MastLoc, Loc and Type, и все значения из столбцов Qty and HE были перемещены в новые столбцы, созданные с использованием целых чисел из столбца HE.

Итак,Пока я сделал:

df['colQty'] = ['Qty' + str(x) for x in df['HE'].tolist()]
df['colPR'] = ['PR' + str(x) for x in df['HE'].tolist()]

Я не могу придумать, как делать дальше.

1 Ответ

0 голосов
/ 04 октября 2018

Использование pivot_table с настройкой нескольких индексов

s=pd.pivot_table(df,index=['MastLoc','Loc','Type'],columns=['HE'],values=['PR','Qty'],aggfunc='sum')
s.columns=s.columns.map('{0[0]}{0[1]}'.format) 
s
Out[895]: 
                   PR1   PR2   PR3  PR24  Qty1  Qty2  Qty3  Qty24
MastLoc Loc  Type                                                
E1      LocA TB    NaN  23.0   NaN   NaN   NaN  18.0   NaN    NaN
             TC    2.0   NaN  17.0   NaN   3.0   NaN  11.0    NaN
        LocB TB    NaN   NaN   NaN   3.0   NaN   NaN   NaN    4.0
             TC    NaN   NaN   2.0   NaN   NaN   NaN   3.0    NaN
...