Don*_*nRK 6 python counter dataframe python-3.x pandas
我有一个pandas.DataFrame包含很多列.我只对其中type ='object'的那些列('names')感兴趣.我想回答有关此专栏的三个问题:
除了纳米值之外,最常出现的值是什么?
有多少值符合该标准(答案#1中的值计数)?
这些值多久出现一次?
我从一个大型数据帧(df)开始.我感兴趣的专栏叫做'名字'.首先,我使用collection.Counter来获取'names'列中每个唯一值的出现次数:
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})
Run Code Online (Sandbox Code Playgroud)
然后我将Counter转换回数据帧:
In [53]: df1 = pd.DataFrame.from_dict(cntr, orient='index').reset_index()
In [54]: df1 = df1.rename(columns={'index':'names', 0:'cnt'})
Run Code Online (Sandbox Code Playgroud)
这给了我一个包含以下内容的pandas数据框:
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
Run Code Online (Sandbox Code Playgroud)
下一部分是我需要一些帮助的地方.我在这个例子中的期望输出是:
答案#1 = [John,Ryan]
答案#2 = 2
答案#3 = 126
我不相信使用计数器是最好的选择,因此我愿意接受保留在数据帧内的选项,而不会在数据帧之间反弹以反击数据帧.
您可以直接从以下位置获取该信息Counter:
from collections import Counter
data = Counter({'Erk': 118, 'James': 120, 'John': 126,
'Michael': 122, 'Phil': 117, 'Ryan': 126})
by_count = {}
for k, v in data.items():
by_count.setdefault(v, []).append(k)
max_value = max(by_count.keys())
print(by_count[max_value], len(by_count[max_value]), max_value)
Run Code Online (Sandbox Code Playgroud)
['John', 'Ryan'] 2 126
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |