使用datafram选择带有除法运算符mysql的stament

2024-05-15 10:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框中有一个表:

df = pd.DataFrame({
        'CategoryCount': {0: 0, 1: 12, 2: 15, 3: 0, 4: 25, 5: 0},
        'frequency': {0: 123, 1: 234, 2: 456, 3: 678, 4: 890, 5: 145}
    })

+-----------------+-----------+
|  CategoryCount  | frequency |
+-----------------+-----------+
| 0               | 123       |
| 12              | 234       |
| 15              | 456       |
| 0               | 678       |
| 25              | 890       |
| 0               | 145       |
+-----------------+-----------+

它有300行

我想找到类别计数的总数,其中频率小于75% 我用普通mysql编写这个查询就是为了这样做:

select count(CategoryCount) 
from category_analysis 
where (frequency * 100 / (select sum(frequency) from category_analysis)) < 75

如何在pandas中使用python实现相同的功能。你知道吗


Tags: 数据fromdataframedfmysqlanalysis类别select
2条回答

IIUC这将是相当的(10%,因为您的所有样本行<;75%):

In [15]: df.frequency.sum()
Out[15]: 2526

In [16]: df.frequency / df.frequency.sum() < 0.1
Out[16]:
0     True
1     True
2    False
3    False
4    False
5     True
Name: frequency, dtype: bool

In [17]: df.loc[df.frequency / df.frequency.sum() < .1]
Out[17]:
   CategoryCount  frequency
0              0        123
1             12        234
5              0        145

In [18]: len(df.loc[df.frequency / df.frequency.sum() < .1])
Out[18]: 3

或者更好一点variant from @John Galt

In [19]: (df.frequency < df.frequency.sum() * 0.1 ).sum()
Out[19]: 3

OP在SQL中的查询:

enter image description here

注意:这并不能回答OP的问题。然而,正如@MaxU所指出的,它可能对其他人有所帮助。你知道吗

使用value_countsnormalize

df.CategoryCount.value_counts(normalize=True).lt(.75).sum()

相关问题 更多 >