我有一个包含大量列的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})
然后我将Counter转换回数据帧:
In [53]: df1 = pd.DataFrame.from_dict(cntr, orient='index').reset_index()
In [54]: df1 = df1.rename(columns={'index':'names', 0:'cnt'})
这给了我一个包含以下内容的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
下一部分是我需要一些帮助的地方。此示例中我想要的输出是:
答案#1 = [John,Ryan]
答案#2 = 2
答案#3 = 126
我不相信使用计数器是最好的选择,因此我对保留在数据帧内的选项持开放态度,而不会在数据帧之间反弹以反击数据帧。
答案 0 :(得分:4)
您可以直接从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)
['John', 'Ryan'] 2 126
答案 1 :(得分:2)
有一个帮助方法可以满足您的需求:value_counts()
。即使对于大型数据帧,它也是有效的。
df1 = df['names'].value_counts()
# question 3
q3 = df1.max()
# question 1
q1 = df1.loc[df1 == q3].index.tolist()
# question 2
q2 = len(q1)
答案 2 :(得分:1)
因为你提到了模式
from scipy import stats
Val,cnt=stats.mode(df1.cnt)
Val
Out[349]: array([126], dtype=int64)
cnt
Out[350]: array([2])
df1.names[df1.cnt.isin(Val)].tolist()
Out[358]: ['John', 'Ryan']
答案 3 :(得分:0)
您也可以使用内置模式的pandas,即
m = df1['cnt'].mode()
0 126
dtype: int64
sum(df1['cnt'].isin(m))
2
df1[df1['cnt'].isin(m)]['names']
3 Ryan
4 John
Name: names, dtype: object
答案 4 :(得分:0)
我知道我迟到了,但我已经这样做了 - 您需要在 python 中导入统计模块以及熊猫。
data_cut = data.groupby(['HIGH_LEVEL_CATEGORY','SKU']).agg({'M2': ['mean','median', 'min', 'max', 'count', 'var', 'std', 'sum', stats.mode]
}).sort_index().reset_index()
data_cut.columns = ['HIGH_LEVEL_CATEGORY'
,'SKU'
, 'M2_Mean'
,'M2_Median'
, 'M2_Min'
, 'M2_Max'
, 'M2_Count'
, 'M2_Var'
, 'M2_Std'
, 'M2_Sum'
, 'M2_Mode'
]