2017-05-29 10 views
1

Ich habe einen df:Schwenk Pandas df - Spaltenwerte in Spaltennamen drehen

pd.DataFrame({'time_period': {0: pd.Timestamp('2017-04-01 00:00:00'), 
    1: pd.Timestamp('2017-04-01 00:00:00'), 
    2: pd.Timestamp('2017-03-01 00:00:00'), 
    3: pd.Timestamp('2017-03-01 00:00:00')}, 
'cost1': {0: 142.62999999999994, 
    1: 131.97000000000003, 
    2: 142.62999999999994, 
    3: 131.97000000000003}, 
'revenue1': {0: 56, 
    1: 113.14999999999998, 
    2: 177, 
    3: 99}, 
'cost2': {0: 309.85000000000002, 
    1: 258.25, 
    2: 309.85000000000002, 
    3: 258.25}, 
'revenue2': {0: 4.5, 
    1: 299.63,2: 309.85, 
    3: 258.25}, 
'City': {0: 'Boston', 
    1: 'New York',2: 'Boston', 
    3: 'New York'}}) 

Ich möchte Struktur wieder diese df, so dass für die Einnahmen und Kosten separat:

pd.DataFrame({'City': {0: 'Boston', 1: 'New York'}, 
'Apr-17 revenue1': {0: 56.0, 1: 113.15000000000001}, 
'Apr-17 revenue2': {0: 4.5, 1: 299.63}, 
'Mar-17 revenue1': {0: 177, 1: 99}, 
'Mar-17 revenue2': {0: 309.85000000000002, 1: 258.25}}) 

Und ein ähnlich df für Kosten.

Grundsätzlich die time_period Spaltenwerte in Spaltennamen wie Apr-17, Mar-17 mit Revenue/Kosten-String als angemessen und Werte von Revenue1/Revenue2 und Cost1/Cost2 jeweils.

Ich habe mit etwas Erfolg mit pd.pivot_table gespielt, aber ich kann nicht genau bekommen, was ich will.

+0

Bitte Ihr Beispiel überprüfen. Die erwartete Ausgabe stimmt nicht mit den Daten im Eingabe-DF überein (wie das Datum, die Einnahmen für Orlando usw.). – Allen

+0

@Allen - danke, dass du darauf hingewiesen hast. Ich habe gerade korrigiert. :-) – codingknob

+0

Ich habe die 2. Stadtsäule zur Vereinfachung entfernt ..... – codingknob

Antwort

2

Verwenden set_index und unstack

import datetime as dt 
df['time_period'] = df['time_period'].apply(lambda x: dt.datetime.strftime(x,'%b-%Y')) 

df = df.set_index(['A', 'B', 'time_period'])[['revenue1', 'revenue2']].unstack().reset_index() 
df.columns = df.columns.map(' '.join) 


    A   B  revenue1 Apr-2017 revenue1 Mar-2017 revenue2 Apr-2017 revenue2 Mar-2017 
0 Boston  Orlando 56.00    177.0    4.50    309.85 
1 New York Dallas 113.15    99.0    299.63    258.25