首页 > 解决方案 > Pandas汇总价格并计算价格与数量数据的权重/权重,并按5个价格分组

问题描述

我有一个这样的数据框:

       price   volume
0     100.0     2500
1     100.5     4100
2     101.0     2311
3     101.5     5066
4     102.0     9585
...    ...       ...

我想首先获得一组价格,然后以 5 的步长对交易量求和。例如(使用随机值):

       price   volume
0     100.0     15000
1     105.0     12000
2     110.0     19000
3     115.0     30000
4     120.0     21000
...    ...       ...

最后,根据个人的交易量和价格,我想给每个价格一个权重/加权平均数/分数,这样我就可以标准化数据以了解哪个交易量的权重最大。例如:

       price   volume     weight   
0     100.0     15000        3  
1     105.0     12000       2.5
2     110.0     19000       3.5
3     115.0     30000       5
4     120.0     21000       4
...    ...       ...

谁能帮我解决这个问题?

标签: pythonpandasdataframe

解决方案


我使用标准方法对价格进行四舍五入,因此 97.5 到 102.49 将在第 100 组中。重量 - 我使用了简单的公式,很明显。

数据.csv:

price   volume
100.0     2500
103.5     4100
101.0     2311
105.5     5066
109.0     9585

代码:

import pandas as pd
import numpy as np

df = pd.read_csv('data.csv', delimiter='\s+')
print(df)
df['price_grp'] = np.around(df.price.values/5, decimals=0)*5
df['tot_vol'] = df.groupby('price_grp')['volume'].transform('sum')
df['weight'] = np.around(df['volume'] / df['tot_vol'], decimals=2)
print(df)

输出:

   price  volume
0  100.0    2500
1  103.5    4100
2  101.0    2311
3  105.5    5066
4  109.0    9585
   price  volume  price_grp  tot_vol  weight
0  100.0    2500      100.0     4811    0.52
1  103.5    4100      105.0     9166    0.45
2  101.0    2311      100.0     4811    0.48
3  105.5    5066      105.0     9166    0.55
4  109.0    9585      110.0     9585    1.00

推荐阅读