2017-10-31 2 views
1

ich eine Tabelle, die wie folgt aussieht:Pandas Zeitspanne und Gruppen: Need to GROUPBY/Dreh mit Index als Gruppen-ID mit Spalten, den jüngsten Zeit Werten entsprechen

Index Group_Id Period Start Period End Value Value_Count 
    42 1016833 2012-01-01 2013-01-01  127491.00  17.0 
    43 1016833 2013-01-01 2014-01-01  48289.00  9.0 
    44 1016833 2014-01-01 2015-01-01  2048.00  2.0 
    45 1016926 2012-02-01 2013-02-01  913.00  1.0 
    46 1016926 2013-02-01 2014-02-01  6084.00  5.0 
    47 1016926 2014-02-01 2015-02-01  29942.00  3.0 
    48 1016971 2014-03-01 2015-03-01  0.00   0.0 

Ich versuche, mit am Ende ein "breites" df, wobei jede Group_Id eine Beobachtung hat und die Werte/Wert-Zählungen in Spalten umgerechnet werden, die ihrer jeweiligen Periode in der Reihenfolge der Aktualität entsprechen. So ist das Endergebnis möchte wie:

Index Group_Id Value_P0 Value_P1 Value_P3 Count_P0 Count_P1 ... 
    42 1016833 2048.00  48289.00 127491.00  2.0   9.0 
    45 1016926 29942.00  6084.00 913.00  3.0   5.0 
    48 1016971 0.0   0.00  0.0   0.0   0.0 

Wo Value_P0 ist der jüngste Wert ist Value_P1 der nächste jüngste Wert danach, und die Anzahl Spalten funktionieren auf die gleiche Art und Weise.

Ich habe versucht, die Tabelle zu schwenken, so dass die Group_IDs die Indizes sind und Zeitraum Start ist die Spalten und Werte oder Zählungen ist der entsprechende Wert.

Period Start 2006-07-01 2008-07-01 2009-02-01 2009-12-17 2010-02-01 2010-06-01 2010-07-01 2010-08-13 2010-09-01 2010-12-01 ... 2016-10-02 2016-10-20 2016-12-29 2017-01-05 2017-02-01 2017-03-28 2017-04-10 2017-05-14 2017-08-27 2017-09-15 
Group_Id                      
1007310 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1007318 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1007353 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 

So kann ich die GROUP_IDs als ein Datensatz, sondern müssten dann durch jede Reihe der vielen Spalten Schleife und ziehen Sie die Nicht-NaN-Werte aus. Ihre Reihenfolge würde dem ältesten zum neuesten entsprechen. Dies scheint jedoch ein falscher Weg zu sein.

Ich habe auch die Gruppierung nach Group_Id in Betracht gezogen und irgendwie ein Timedelta erstellt, das dem neuesten Datum entspricht. Dann von diesem Pivotieren/Entstapeln, so dass die Spalten das Timedelta sind und die Werte Wert oder Wert_Zähler sind. Ich bin mir nicht sicher, wie ich das machen soll. Ich schätze die Hilfe.

Antwort

0

Noch pivot arbeitete mit

df['ID']=df.groupby('Group_Id').cumcount() 
d1=df.pivot('Group_Id','ID','Value').add_prefix('Value_P') 
d2=df.pivot('Group_Id','ID','Value_Count').add_prefix('Count_P') 
pd.concat([d1,d2],axis=1).fillna(0) 

Out[347]: 
ID  Value_P0 Value_P1 Value_P2 Count_P0 Count_P1 Count_P2 
Group_Id                
1016833 127491.0 48289.0 2048.0  17.0  9.0  2.0 
1016926  913.0 6084.0 29942.0  1.0  5.0  3.0 
1016971  0.0  0.0  0.0  0.0  0.0  0.0 
+0

Dies. Vielen Dank! –

+0

@lucky_but_stupid Yw ~ BTW, kannst du das akzeptieren? – Wen

Verwandte Themen