假设我的DataFrame
包含的列A
仅包含值'foo'
和'bar'
,并且我想计算{{foo
的分数1}}秒。一种方法是使用布尔选择和__len__
函数:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
assert len(df[df['A'] == 'foo']) / len(df) == 0.625
但是,我觉得这也可以使用pandas
和groupby
以更count
- 本地方式完成。例如,
print(df.groupby('A').count() / len(df))
产量
B C D
A
bar 0.375 0.375 0.375
foo 0.625 0.625 0.625
建议的进展方式是什么?我只是选择任意列中的foo
处吗?
答案 0 :(得分:0)
在温的评论之后:
In [10]: df.A.value_counts()['foo']/len(df)
Out[10]: 0.625
答案 1 :(得分:0)
熊猫本机方式为series.value_counts(normalize=True)
:
df.A.value_counts(normalize=True)
foo 0.625
bar 0.375
Name: A, dtype: float64
这将显示所有值,因此,如果您仅对单个值感兴趣并且想要最佳性能,那么@fuglede的注释中的方法会更好:
(df.A.values == 'foo').mean()