[英]pandas: sorting and dropping rows from a grouped dataframe
我有一个数据框:
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:'mean'
所以我查看了我的专栏:
groupeddf.columns
这使:
MultiIndex(levels=[['rating'], ['count', 'mean']],
labels=[[0, 0], [0, 1]])
而且,现在我不确定该怎么做。 我想做的就是:
您可以使用tuple
键来索引MultiIndex
的 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.