熊猫:计算值的范围是0.001,因此,计数范围是0到0.001,然后计数范围是0.001和0.002等

时间:2018-12-28 15:36:09

标签: python pandas

我想按特定范围(0,1; 0,2; etc)对我的值(CPA%)进行分组。 现在,我的代码如下:

 conn = psycopg2.connect("dbname=monty user=postgres host=localhost password=postgres")
cur = conn.cursor()
cur.execute("SELECT * FROM binance.zrxeth_ob_indicators;")
row = cur.fetchall()
df = pd.DataFrame(row,columns=['timestamp', 'topAsk', 'topBid', 'CPA', 'midprice', 'CPB', 'spread', 'CPA%', 'CPB%'])
pd.cut(df,0.001)

我的输出如下:

CPA%
0.005822
0.007129
0.008345
0.022531
0.016073
0.013433
0.013616
0.016571

如何将这些值按特定范围分组并计数?我是熊猫图书馆的新手,不正确地了解如何使用它...

2 个答案:

答案 0 :(得分:0)

您不需要cut,将//value_counts一起使用

(df['CPA%']//0.001).value_counts()
Out[628]: 
13.0    2
16.0    2
22.0    1
8.0     1
7.0     1
5.0     1
Name: CPA%, dtype: int64

让我们尝试其他选择

import numpy as np 

np.floor(df['CPA%']*1000).value_counts()
Out[637]: 
13.0    2
16.0    2
22.0    1
8.0     1
7.0     1
5.0     1
Name: CPA%, dtype: int64
-

答案 1 :(得分:0)

我不确定这是否能回答您的问题,但是一种快速的解决方案是在熊猫中创建范围组的新列。像这样:

df.loc[:,'range_group'] = np.where(df.CPA >0.75, 1, np.where(df.CPA > 0.5, 2, np.where(df.CPA> 0.25, 3, 4)))

然后您进行分组,例如,对每个范围组的行进行计数:

df.groupby('range_group').CPA.count() 

只需更改,将count()更改为所需的任何函数即可。 这是你想要的吗?

根据下面的评论,您似乎需要这样做:

steps = [0,0.001, 0.002, 0.003, ....,1]
df.groupby(pd.cut(df.CPA, steps)).count()