熊猫:根据类别索引加入系列

时间:2017-04-10 15:14:26

标签: python pandas join indexing categories

我有两个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,但我没有设法将其分组。 THX

1 个答案:

答案 0 :(得分: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'])

在cat上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