我的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实现相同的功能。
答案 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的查询:
答案 1 :(得分:2)
注意: 这不符合OP的问题。但是,正如@MaxU指出的那样,它可能对其他人有所帮助。
使用value_counts
和normalize
df.CategoryCount.value_counts(normalize=True).lt(.75).sum()