2017-04-10 77 views
1

系列我有兩個pd.Series:熊貓:加入基於類別索引

  A 
idx  
200 1 
300 2 
400 3 

長度爲n和

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

與長度爲m。 請注意,系列的長度可能不同。

我想有一類指標:

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

,並執行以下pd.Series之間的相關性:

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

那麼,如何根據自己的索引插槽我的數據類別索引並對歸入同一類別的條目執行總和? 我嘗試過與groupby,但我沒有設法groupby分類。 THX

回答

0

IIUC:

數據設置:

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]) 

轉換爲數據幀和使用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']) 

對貓做groupby,並使用創建類別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']) 

輸出:

  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

謝謝!除了我必須使用'group_b = df_b.groupby('cat')[0] .sum()'而不是'group_b = df_b.groupby('cat')[0] .apply(list)''以獲得我想要的結果。 –

+0

啊......我以爲你想要一個值的列表,而不是實際的總和。好的交易,我很高興它解決了。乾杯。 –