我有两个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
答案 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