【发布时间】:2018-06-23 09:49:34
【问题描述】:
我有一个包含许多列的pandas.DataFrame。我只对 type = 'object' 的那些列('names')中的一个感兴趣。关于本专栏,我想回答三个问题:
除了 nan 值之外,哪些值最常出现?
有多少值符合该标准(答案 #1 中的值计数)?
这些值多久出现一次?
我从一个大型数据框 (df) 开始。我感兴趣的列称为“名称”。首先,我使用 collection.Counter 来获取“名称”列中每个唯一值的出现次数:
In [52]: cntr = collections.Counter([r for i, r in df['names'].dropna().iteritems()])
Out[52]: Counter({'Erk': 118,
'James': 120,
'John': 126,
'Michael': 129,
'Phil': 117,
'Ryan': 126})
然后我将 Counter 转换回数据框:
In [53]: df1 = pd.DataFrame.from_dict(cntr, orient='index').reset_index()
In [54]: df1 = df1.rename(columns={'index':'names', 0:'cnt'})
这给了我一个熊猫数据框,其中包含:
In [55]: print (type(df1), df1)
Out[55]: <class 'pandas.core.frame.DataFrame'>
names cnt
0 Erk 118
1 James 120
2 Phil 117
3 John 126
4 Michael 122
5 Ryan 126
下一部分是我需要一些帮助的地方。在这个例子中我想要的输出是:
答案 #1 = [约翰,瑞恩]
答案 #2 = 2
答案 #3 = 126
我不相信使用 Counter 是最佳选择,因此我愿意接受保留在数据框内而不在数据框之间弹跳以反击回数据框的选项。
【问题讨论】:
-
您可以查看 value_counts() 方法,这将非常有用:pandas.pydata.org/pandas-docs/stable/generated/…。在你的情况下 df1 = df['names'].value_counts()
标签: python python-3.x pandas dataframe counter