【发布时间】:2016-09-09 15:28:59
【问题描述】:
在 R/dplyr 中,我可以做到
summarise(iris, max_width=max(Sepal.Width), min_width=min(Sepal.Width))
然后得到:
max_width min_width
1 4.4 2
熊猫中有类似summarise的东西吗?我知道describe(),但我希望结果只包含给定列的给定汇总统计信息,而不是所有列的所有汇总统计信息。在 pandas 中,iris.describe() 给出:
sepal_length sepal_width petal_length petal_width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000 1.199333
std 0.828066 0.435866 1.765298 0.762238
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
【问题讨论】:
-
Dupe: stackoverflow.com/questions/22235245/… ,基本上
describe是等价的,因此在您的情况下,您可以通过传递您想要iris[list_of_cols].describe()或iris['sepal_length'].describe()的摘要信息的列列表来进行子选择只为您提供该列的统计数据 -
如果您只关注特定的统计数据,那么您可以将它们编入索引
iris['sepal_width'].describe().loc[['min','max']] -
如果你只想做这些计算,你也可以只做
pd.Series(dict(max_width=iris.sepal_width.max(), min_width=iris.sepal_width.min()))以获得与 dplyr 几乎相同的输出。 -
@EdChurn 好的,但是如果我有多个列和多个汇总统计信息,这种方法将如何推广?例如,如果我希望输出包含:Sepal.Width 的
max、Petal.length 的min和Petal.Width的median,比如说? dplyr::summarise 可以轻松处理。 -
没有内置函数 你必须在调用
describe或像 joris 所说的那样构造它iris['sepal_width'].max(),iris['petal_length'].min(),iris['petal_width'].median()之后过滤结果 df