2017-04-10 3 views
1

Ich habe zwei pd.Series:Pandas: Werden Sie Mitglied Serie basierend auf Kategorieindex

  A 
idx  
200 1 
300 2 
400 3 

mit Länge n und

  B 
idx  
200 4 
350 5 
360 6 
370 7 
380 8 

mit Länge m. Beachten Sie, dass die Länge der Serie unterschiedlich sein kann.

Ich möchte eine Kategorie Index haben:

cat 
[200, 300) 
[300, 400) 
[400, 500) 

und eine Korrelation zwischen den folgenden pd.Series ausführen:

     A  B 
cat 
[200, 300) 1   3 
[300, 400) 2   4+5+6+7 
[400, 500) 3   NaN 

So wie ich meine Daten haben Slot basierend auf ihren Index in der Kategorienindex und führen Sie eine Summe über Einträge aus, die in die gleiche Kategorie fallen? Ich versuchte es mit groupby, aber ich schaffte es nicht, über Kategorien zu gruppieren. THX

Antwort

0

IIUC:

Datenaufbau:

a = pd.Series(data=[1,2,3],index=[200,300,400]) 
b = pd.Series(data=[4,5,6,7,8], index=[200,350,360,370,380]) 

zu Datenrahmen konvertieren und erstellen Kategorie pd.cut

df_a = a.to_frame() 
df_a['cat'] = pd.cut(df_a.index,bins=[0,100,200,300,400,500,600], labels=['0-99','100-199','200-299','300-399','400-499','500-599']) 

df_b = b.to_frame() 
df_b['cat'] = pd.cut(df_b.index,bins=[0,100,200,300,400,500,600], labels=['0-99','100-199','200-299','300-399','400-499','500-599']) 

Sie groupby auf Katze und verwenden pd.concat

group_b = df_b.groupby('cat')[0].apply(list) 
group_b = group_b.where(group_b.str.len()) 

group_a = df_a.groupby('cat')[0].apply(list) 
group_a = group_a.where(group_a.str.len()) 

pd.concat([group_a,group_b],axis=1,keys=['A','B']) 

Ausgang:

  A    B 
cat      
0-100 NaN   NaN 
101-200 [1]   [4] 
201-300 [2]   NaN 
301-400 [3] [5, 6, 7, 8] 
401-500 NaN   NaN 
+0

Dank! Ist wie angekündigt, außer dass ich 'group_b = df_b.groupby ('cat') [0] .sum()' anstelle von 'group_b = df_b.groupby ('cat') [0] .apply (list)' verwenden musste um mein gewünschtes Ergebnis zu erhalten. –

+0

Ah ... Ich dachte, Sie wollten eine Liste von Werten und nicht die tatsächlichen Summen. Guter Deal, ich bin froh, dass es geklappt hat. Prost. –