【发布时间】:2021-08-18 16:25:54
【问题描述】:
我有一个带有间隔的熊猫数据框(按开始和停止定义):
df = pd.DataFrame(
{
'start': [1,1,1,2,2,2,2,3,3,3,3,3,3,3],
'stop': [9,9,10,10,10,11,11,11,11,12,11,12,11,11],
'percent' : [0.51,0.29,0.92,0.60,0.10,0.12,0.60,0.30,0.10,0.42,0.51,0.51,0.51,0.10],
'order':[3,80,3,3,4,8,89,2,3,4,5,64,82,68]
}
)
看起来像:
start stop percent order
1 9 0.51 3
1 9 0.29 80
1 10 0.92 3
2 10 0.60 3
2 10 0.10 4
2 11 0.12 8
2 11 0.60 89
3 11 0.30 2
3 11 0.10 3
3 12 0.42 4
3 11 0.51 5
3 12 0.51 64
3 11 0.51 82
3 11 0.10 68
我想计算,每个位置(通过分割区间):总计数、价值总和、订单总和
注意:原始数据框在示例中未进行坐标排序。
我想最终得到一个数据框:
pos count sum_percent sum_order
1 3 1.72 86
2 7 3.14 190
3 14 5.59 418
4 14 5.59 418
5 14 5.59 418
6 14 5.59 418
7 14 5.59 418
8 14 5.59 418
9 14 5.59 418
10 12 4.79 335
11 9 3.17 325
12 2 0.93 68
我设法得到了我想要的计数列的结果,如下所示:
max_pos=df[['start', 'stop']].values.max()
pos_range=np.arange(1, max_pos+1)
counts = ((df[['start']].values <= pos_range) & (pos_range <= df[['stop']].values)).sum(axis=0)
o = pd.DataFrame({'pos': pos_range, "counts": counts})
但是对于列的总和,我没能做到。 有什么帮助吗? 提前致谢
【问题讨论】:
-
你的代码有错误,因为
pos_range <= df[['stop']].values只给你False并且你最终得到每个“分割间隔”的零计数 -
@BraulioBarahona 这部分代码输出预期结果
标签: python pandas dataframe numpy