有没有办法省略 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
... .. ...
.describe()
属性生成一个 Dataframe,其中 count
、std
、max
... 是索引值,因此根据 documentation,您应该使用 .loc
来检索所需的索引值:
df.describe().loc[['count','max']]
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
查看答案,我没有看到一个真正适用于使用 groupby() 之后从 describe() 返回的 DataFrame 的答案。
关于 MultiIndex Selection 的文档给出了答案的提示。 .xs() 函数适用于一项选择,但不适用于多项选择,但 .loc 可以。
df.groupby(['simpleDate']).describe().loc[:,(slice(None),['count','max'])]
这保留了 .describe() 返回的漂亮 MultiIndex,但仅选择了列。
@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
坚持使用描述,您可以取消索引的堆叠,然后也可以正常切片
df.describe().unstack()[['count','max']]
为什么你想直接使用
describe
并生成比丢弃它更多的东西?只需生成 agg
即可直接获取您想要的内容:
df.groupby('simpleDate').executeTime.agg(['count','max'])