【问题标题】:Is there a pandas equivalent of dplyr::summarise?是否有相当于 dplyr::summarise 的熊猫?
【发布时间】: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 的minPetal.Widthmedian,比如说? dplyr::summarise 可以轻松处理。
  • 没有内置函数 你必须在调用 describe 或像 joris 所说的那样构造它 iris['sepal_width'].max(), iris['petal_length'].min(), iris['petal_width'].median() 之后过滤结果 df

标签: python r pandas dplyr


【解决方案1】:

从 0.20 版开始,agg 也可以在 DataFrames 上调用 (source)。

所以你可以这样做:

iris.agg({'sepal_width': 'min', 'petal_width': 'max'})

petal_width    2.5
sepal_width    2.0
dtype: float64

iris.agg({'sepal_width': ['min', 'median'], 'sepal_length': ['min', 'mean']})

        sepal_length  sepal_width
mean        5.843333          NaN
median           NaN          3.0
min         4.300000          2.0

另见dplyr summarize equivalent in pandas。不过,它侧重于 groupby 操作。

【讨论】:

    【解决方案2】:

    对于您的问题: 是的,有。

    >>> from datar.all import f, summarise, max, min
    >>> from datar.datasets import iris
    >>> 
    >>> summarise(iris, max_width=max(f.Sepal_Width), min_width=min(f.Sepal_Width))
       max_width  min_width
       <float64>  <float64>
    0        4.4        2.0
    

    我是datar 包的作者。

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多