Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:基于类别索引的联接系列_Python_Pandas_Join_Indexing_Categories - Fatal编程技术网

Python 熊猫:基于类别索引的联接系列

Python 熊猫:基于类别索引的联接系列,python,pandas,join,indexing,categories,Python,Pandas,Join,Indexing,Categories,我有两个pd系列: A idx 200 1 300 2 400 3 A B cat [200, 300) 1 3 [300, 400) 2 4+5+6+7 [400, 500) 3 NaN 长度为n和 B idx 200 4 350 5 360 6 370 7 380 8 长度为m。 请注意,系列的长

我有两个pd系列:

          A
idx    
200  1
300  2
400  3
                        A      B
cat
[200, 300)   1         3 
[300, 400)   2         4+5+6+7
[400, 500)   3         NaN
长度为n和

          B
idx    
200  4
350  5
360  6
370  7
380  8
长度为m。 请注意,系列的长度可以不同

我想要一个分类索引:

cat
[200, 300)
[300, 400)
[400, 500)
并在以下pd.系列之间进行关联:

          A
idx    
200  1
300  2
400  3
                        A      B
cat
[200, 300)   1         3 
[300, 400)   2         4+5+6+7
[400, 500)   3         NaN
那么,如何将基于索引的数据放入类别索引中,并对属于同一类别的条目进行求和呢? 我试过使用groupby,但我无法通过分类进行groupby。 THX:

数据设置:

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

谢谢如广告所示,除了我必须使用
group_b=df_b.groupby('cat')[0]。sum()
而不是
group_b=df_b.groupby('cat')[0]。应用(list)
以获得我想要的结果。啊。。。我以为你想要的是一份价值清单,而不是实际的总和。很好,我很高兴它成功了。干杯,谢谢!如广告所示,除了我必须使用
group_b=df_b.groupby('cat')[0]。sum()
而不是
group_b=df_b.groupby('cat')[0]。应用(list)
以获得我想要的结果。啊。。。我以为你想要的是一份价值清单,而不是实际的总和。很好,我很高兴它成功了。干杯