修改 Python Pandas 描述的输出

问题描述 投票:0回答:6

有没有办法省略 pandas 描述的一些输出? 这个命令给了我我想要的表输出(简单日期的执行时间的计数和平均值)

df.groupby('simpleDate').executeTime.describe().unstack(1)

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

我猜答案是重新编写该行,而不是使用描述,但我没有运气按 simpleDate 进行分组并且获得执行时间平均值的计数。

我可以按日期计数:

df.groupby(['simpleDate']).size()

或按日期执行时间:

df.groupby(['simpleDate']).mean()['executeTime'].reset_index()

但无法弄清楚组合它们的语法。

我想要的输出:

            count  mean  
09-10-2013      8  20.523   
09-11-2013      4  21.112  
09-12-2013      3  18.531
...            ..  ...
python pandas
6个回答
46
投票

.describe()
属性生成一个 Dataframe,其中
count
std
max
... 是索引值,因此根据 documentation,您应该使用
.loc
来检索所需的索引值:

df.describe().loc[['count','max']]

34
投票

Describe 返回一个系列,因此您可以选择您想要的内容

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

21
投票

查看答案,我没有看到一个真正适用于使用 groupby() 之后从 describe() 返回的 DataFrame 的答案。

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

df.groupby(['simpleDate']).describe().loc[:,(slice(None),['count','max'])]

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


6
投票

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

@Rafa 说到点上了:

df.describe().info()
揭示了生成的数据帧具有
Index: 8 entries, count to max

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

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

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

Y
对 df 进行分组:

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

1
投票

坚持使用描述,您可以取消索引的堆叠,然后也可以正常切片

df.describe().unstack()[['count','max']]


0
投票

为什么你想直接使用

describe
并生成比丢弃它更多的东西?只需生成
agg
即可直接获取您想要的内容:

df.groupby('simpleDate').executeTime.agg(['count','max'])
© www.soinside.com 2019 - 2024. All rights reserved.