我有一个数据框:
import pandas as pd
df = pd.read_csv('test.csv')
brand rating
0 a 81
1 a 83
2 a 60
3 a 45
4 b 73
5 b 55
6 b 90
7 c 60
8 d 70
9 e 75
10 e 80
11 e 85
到目前为止,我已经弄清楚了如何按品牌对数据框进行分组并计算每个品牌类别的均值和计数:
groupeddf = df.groupby('brand', as_index=False).agg(['count', 'mean'])
产生:
rating
count mean
brand
a 4 67.250000
b 3 72.666667
c 1 60.000000
d 1 70.000000
e 3 80.000000
现在,我想按平均值对这些结果进行排序,并删除所有少于三个的品牌(因此,在这种情况下,请删除C和D的行)。
我正在尝试按“均值”排序:
groupeddf.sort_values('mean')
但是,我收到一个KeyError:“平均值”
所以我看了我的专栏文章
groupeddf.columns
给出:
MultiIndex(levels=[['rating'], ['count', 'mean']],
labels=[[0, 0], [0, 1]])
而且,现在我不太确定该怎么做。我要做的就是:
答案 0 :(得分:1)
您可以使用tuple
键来索引您的DataFrame的MultiIndex
:
s = df.groupby('brand').agg(['count', 'mean'])
s[s[('rating', 'count')] >= 3].sort_values(by=('rating', 'mean'))
rating
count mean
brand
a 4 67.250000
b 3 72.666667
e 3 80.000000
如果您想避免首先创建MultiIndex
,请在您的agg
上创建Series
,而不要整个DataFrame
:
s = df.groupby('brand').rating.agg(['count', 'mean'])
count mean
brand
a 4 67.250000
b 3 72.666667
c 1 60.000000
d 1 70.000000
e 3 80.000000
现在建立索引更简单:
s[s['count'] >= 3].sort_values(by='mean')
count mean
brand
a 4 67.250000
b 3 72.666667
e 3 80.000000