如何获得Pandas系列中某个值的出现部分?

时间:2017-10-28 12:38:28

标签: python pandas

假设我的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

但是,我觉得这也可以使用pandasgroupby以更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处吗?

2 个答案:

答案 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()