根据两列和各自的范围值创建计数矩阵 pandas
Create count matrix based on two columns and respective range values pandas
我有一个如下所示的数据框,
name,value,id
meanerror,0.55,aa
meanamount,120,aa
meanerror,0.45,bb
meanamount,150,bb
meanerror,0.88,cc
meanamount,110,cc
meanerror,0.1,dd
meanamount,50,dd
我想从这个数据框创建一个矩阵,如下所示。
, meanamount, total_y
meanerror,0-100,100-200
0.0-0.5, 1, 1, 2
0.5-1, 0, 2, 2
total_x, 1, 3
我真正需要的是,在矩阵中,每个单元格都应包含 id 的计数,这些 id 的值(来自值列)在矩阵的 x 轴和 y 轴的范围内。例如,第一个单元格应该包含 ids 的计数,meanamount 在 0-100 范围内,meanerror 在 0.0-5 范围内。
我尝试了 pandas 数据透视表 table 和交叉表,但不确定如何实现。有人可以帮忙吗?
创建 pivot table:
pt = df.pivot(index='id', columns='name', values='value')
# name meanamount meanerror
# id
# aa 120.0 0.55
# bb 150.0 0.45
# cc 110.0 0.88
# dd 50.0 0.10
Cut 分箱数量和误差:
pt['meanamount'] = pd.cut(pt['meanamount'], bins=range(0, 300, 100))
pt['meanerror'] = pd.cut(pt['meanerror'], bins=np.arange(0, 1.5, 0.5))
# name meanamount meanerror
# id
# aa (100, 200] (0.5, 1.0]
# bb (100, 200] (0.0, 0.5]
# cc (100, 200] (0.5, 1.0]
# dd (0, 100] (0.0, 0.5]
创建一个 crosstab 的错误 x 数量:
pd.crosstab(pt['meanerror'], pt['meanamount'], margins=True)
# meanamount (0, 100] (100, 200] All
# meanerror
# (0.0, 0.5] 1 1 2
# (0.5, 1.0] 0 2 2
# All 1 3 4
我有一个如下所示的数据框,
name,value,id
meanerror,0.55,aa
meanamount,120,aa
meanerror,0.45,bb
meanamount,150,bb
meanerror,0.88,cc
meanamount,110,cc
meanerror,0.1,dd
meanamount,50,dd
我想从这个数据框创建一个矩阵,如下所示。
, meanamount, total_y
meanerror,0-100,100-200
0.0-0.5, 1, 1, 2
0.5-1, 0, 2, 2
total_x, 1, 3
我真正需要的是,在矩阵中,每个单元格都应包含 id 的计数,这些 id 的值(来自值列)在矩阵的 x 轴和 y 轴的范围内。例如,第一个单元格应该包含 ids 的计数,meanamount 在 0-100 范围内,meanerror 在 0.0-5 范围内。
我尝试了 pandas 数据透视表 table 和交叉表,但不确定如何实现。有人可以帮忙吗?
创建 pivot table:
pt = df.pivot(index='id', columns='name', values='value') # name meanamount meanerror # id # aa 120.0 0.55 # bb 150.0 0.45 # cc 110.0 0.88 # dd 50.0 0.10
Cut 分箱数量和误差:
pt['meanamount'] = pd.cut(pt['meanamount'], bins=range(0, 300, 100)) pt['meanerror'] = pd.cut(pt['meanerror'], bins=np.arange(0, 1.5, 0.5)) # name meanamount meanerror # id # aa (100, 200] (0.5, 1.0] # bb (100, 200] (0.0, 0.5] # cc (100, 200] (0.5, 1.0] # dd (0, 100] (0.0, 0.5]
创建一个 crosstab 的错误 x 数量:
pd.crosstab(pt['meanerror'], pt['meanamount'], margins=True) # meanamount (0, 100] (100, 200] All # meanerror # (0.0, 0.5] 1 1 2 # (0.5, 1.0] 0 2 2 # All 1 3 4