修改Python Pandas描述的输出

KHi*_*bma 11 python pandas

有没有办法省略熊猫描述的一些输出?这个命令给了我我想要的表输出(simpleDate的countTime和count的平均值)

df.groupby('simpleDate').executeTime.describe().unstack(1)
Run Code Online (Sandbox Code Playgroud)

然而,这就是我想要的,数数和意思.我想删除std,min,max等...到目前为止,我只阅读了如何修改列大小.

我猜的答案是重写这行,而不是使用describe,但是我没有运行simpleDate的运气分组,并且在executeTime上得到了计数.

我可以按日期计算:

df.groupby(['simpleDate']).size()
Run Code Online (Sandbox Code Playgroud)

或按日期执行时间:

df.groupby(['simpleDate']).mean()['executeTime'].reset_index()
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚将它们组合起来的语法.

我想要的输出:

            count  mean  
09-10-2013      8  20.523   
09-11-2013      4  21.112  
09-12-2013      3  18.531
...            ..  ...
Run Code Online (Sandbox Code Playgroud)

Jef*_*eff 22

描述返回一个系列,所以你可以选择你想要的

In [6]: s = Series(np.random.rand(10))

In [7]: s
Out[7]: 
0    0.302041
1    0.353838
2    0.421416
3    0.174497
4    0.600932
5    0.871461
6    0.116874
7    0.233738
8    0.859147
9    0.145515
dtype: float64

In [8]: s.describe()
Out[8]: 
count    10.000000
mean      0.407946
std       0.280562
min       0.116874
25%       0.189307
50%       0.327940
75%       0.556053
max       0.871461
dtype: float64

In [9]: s.describe()[['count','mean']]
Out[9]: 
count    10.000000
mean      0.407946
dtype: float64
Run Code Online (Sandbox Code Playgroud)

  • 描述返回系列或数据框,具体取决于您应用它的位置... **此方法仅适用于系列** (3认同)

Raf*_*afa 17

.describe()属性生成一个数据框,其中count,std,max ...是索引的值,因此根据您应该使用的文档,例如:

df.describe().loc[['count','max']]
Run Code Online (Sandbox Code Playgroud)


Jos*_*ler 8

查看答案,我没有看到在使用 groupby() 后实际上对从 describe() 返回的 DataFrame 有效的答案。

MultiIndex selection的文档给出了答案的提示。.xs() 函数适用于一项但不适用于多项选择,但 .loc 有效。

df.groupby(['simpleDate']).describe().loc[:,(slice(None),['count','max'])]
Run Code Online (Sandbox Code Playgroud)

这保留了 .describe() 返回的漂亮 MultiIndex 但只选择了列。


st1*_*297 5

@Jeff 提供的解决方案仅适用于系列。

@Rafa 说到点子上了:df.describe().info()揭示结果数据帧有Index: 8 entries, count to max

df.describe().loc[['count','max']]确实有效,但是df.groupby('simpleDate').describe().loc[['count','max']],这是 OP 所要求的,不起作用。

我认为一个解决方案可能是这样的:

df = pd.DataFrame({'Y': ['A', 'B', 'B', 'A', 'B'],
                    'Z': [10, 5, 6, 11, 12],
                                        })
Run Code Online (Sandbox Code Playgroud)

将 df 分组为Y

df_grouped=df.groupby(by='Y')     


In [207]df_grouped.agg([np.mean, len])

Out[207]: 
        Z    
     mean len
Y            
A  10.500   2
B   7.667   3
Run Code Online (Sandbox Code Playgroud)