2016-02-14 77 views
0

我正在做一些熊猫工作,我试图从数据集中找到某些值。我正在寻找某一列的模式和模式频率。熊猫频率的列值

我已经得到了使用df.col1.mode()的模式,这工作正常,并返回模式(例如男性)。现在我无法在列中获取此值的频率。我知道我可以使用df.col1.value_counts()

我试着用df.col1.value_counts()['Male']尝试得到的时间发生的数量得到列中的所有值的频率,但我得到一个错误说KeyError: 'Male'

这是在正确的方式找到某个值出现在列中的次数?

+0

这意味着'col1'列中没有'Male'。所以这是一个好方法,但只有在确定该值出现在列中时才有效。 – joris

+0

是的,这是正确的方式,我无法复制您的问题。请发布[mcve]。 – Goyo

回答

0
print df 

    A B C 
0 1 2 3 
1 4 5 6 
2 7 8 9 

df.groupby('A').size()/df['A'].count() 

A 
1 0.333333 
4 0.333333 
7 0.333333 
dtype: float64 
+0

但是,我怎么才能得到最多发生的值的结果,而不是所有值的结果 – JJSmith

0

您将遇到的一个问题是模式中有多个项目,因此您没有一对一映射。为了解决这个问题,你可以使用字典理解来获得每种模式。

df = pd.DataFrame({'gender': ['Male', 'Male', 'Female', 'Female', 'Shemale'], 
        'State': ['CA', 'OR', 'AZ', 'CA', 'NY']}) 

modes = df.gender.mode() 
>>> {item: len(df.gender[df.gender.isin(modes[modes == item])]) for item in modes} 
{'Female': 2, 'Male': 2}