对于这样的数据框:
mpg yr name
0 18 70 chevrolet malibu
1 15 70 buick skylark
2 18 70 ford torino
3 16 70 chevrolet el camino
4 17 71 chevrolet chevelle
我可以像这样得到每年的平均 MPG:
auto.groupby('yr')['mpg'].mean()
我尝试了以下方法来获取雪佛兰每年的平均 MPG:
auto.groupby(['yr', auto['name'].str.contains('chevrolet')])['mpg'].mean()
但是,它会创建一个额外的 True/False bool 列,如下所示,其中 False 是非雪佛兰,True 是雪佛兰:
yr name
70 False 16.5
True 17.0
71 False NaN
True 17.0
我正在寻找的是:
yr mpg
x y
您能否 A) 解释为什么我的尝试不起作用,B) 帮助纠正我的错误并解释为什么需要这样做。 谢谢!
最佳答案
我们应该在groupby
之前进行过滤
auto[auto['name'].str.contains('chevrolet')].groupby('yr')['mpg'].mean()
Out[226]:
yr
70 17
71 17
Name: mpg, dtype: int64
您的方法使用 [True,False] 创建另一个 groupby 键,然后,pandas 将对其和列 yr
编辑:
您可以认为这就是您的数据框的样子
auto['yourkey']=auto['name'].str.contains('chevrolet')
auto
Out[228]:
mpg yr name yourkey
0 18 70 chevroletmalibu True
1 15 70 buickskylark False
2 18 70 fordtorino False
3 16 70 chevroletelcamino True
4 17 71 chevroletchevelle True
关于python - Pandas 中的分组和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47479980/