使用pandas dataframe选择使用除法运算符mysql的stament

时间:2016-11-07 17:54:49

标签: python python-2.7 python-3.x pandas dataframe

我的pandas数据框中有一张表:

ComboBox
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}
    })

它有300行

我想找到完全没有。类别数量,频率低于75% 我在普通的mysql中写这个查询:

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

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

2 个答案:

答案 0 :(得分: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的查询:

enter image description here

答案 1 :(得分:2)

注意: 这不符合OP的问题。但是,正如@MaxU指出的那样,它可能对其他人有所帮助。

使用value_countsnormalize

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