Python中的plyr或dplyr

use*_*979 19 python r plyr pandas dplyr

这更像是一个概念性问题,我没有具体问题.

我学习进行数据分析蟒蛇,但我非常熟悉的R - 的关于R的伟大的事情之一是plyr(当然GGPLOT2的),甚至更好dplyr.Pandas当然也有分裂应用,但是在RI中可以做一些事情(在dplyr中,在plyr中有点不同,我现在可以看到dplyr是如何模仿对象编程的.符号)

   data %.% group_by(c(.....)) %.% summarise(new1 = ...., new2 = ...., ..... newn=....)
Run Code Online (Sandbox Code Playgroud)

我在其中同时创建多个汇总计算

我怎么在python中这样做,因为

df[...].groupby(.....).sum() only sums columns, 
Run Code Online (Sandbox Code Playgroud)

而在RI上,一次通话可以有一个均值,一个和,一个特殊函数等

我意识到我可以单独完成所有操作并合并它们,如果我使用的是python,那就没问题了,但是当选择工具时,你不需要键入和检查和验证的任何代码行都会增加时间

另外,在dplyr中你也可以添加mutate语句,所以在我看来它更强大 - 所以我对pandas或python缺少什么 -

我的目标是学习,我花了很多精力学习python,这是一项值得投资,但问题仍然存在

lga*_*len 26

我也是Rp的dplyr的忠实粉丝,正在努力提高我对熊猫的认识.由于您没有特定的问题,我建议您查看下面的帖子,其中介绍了整个介绍性的dplyr插图,并展示了如何使用Pandas完成所有操作.

例如,作者演示了使用R中的管道运算符进行链接:

 flights %>%
   group_by(year, month, day) %>%
   select(arr_delay, dep_delay) %>%
   summarise(
      arr = mean(arr_delay, na.rm = TRUE),
      dep = mean(dep_delay, na.rm = TRUE)
       ) %>%
   filter(arr > 30 | dep > 30)
Run Code Online (Sandbox Code Playgroud)

这是熊猫的实施:

flights.groupby(['year', 'month', 'day'])
   [['arr_delay', 'dep_delay']]
   .mean()
   .query('arr_delay > 30 | dep_delay > 30')
Run Code Online (Sandbox Code Playgroud)

关于如何在原始帖子中使用Pandas实现dplyr操作的更多比较. http://nbviewer.ipython.org/gist/TomAugspurger/6e052140eaa5fdb6e8c0


lga*_*ier 15

人们可以简单地使用Python中的dplyr.

dplyrrpy2中有一个接口(与rpy2-2.7.0一起引入),可以让你编写如下内容:

dataf = (DataFrame(mtcars).
         filter('gear>3').
         mutate(powertoweight='hp*36/wt').
         group_by('gear').
         summarize(mean_ptw='mean(powertoweight)'))
Run Code Online (Sandbox Code Playgroud)

文档中有一个例子.这部分文档是(也)一个jupyter笔记本.查找页面顶部附近的链接.

这个问题的另一个答案是比较R的dplyr和pandas(参见@lgallen).相同的R单线程链接dplyr语句在rpy2的dplyr接口中写入基本相同.

R:

flights %>%
   group_by(year, month, day) %>%
   select(arr_delay, dep_delay) %>%
   summarise(
      arr = mean(arr_delay, na.rm = TRUE),
      dep = mean(dep_delay, na.rm = TRUE)
      ) %>%
   filter(arr > 30 | dep > 30)
Run Code Online (Sandbox Code Playgroud)

蟒蛇+ rpy2:

(DataFrame(flights).
 group_by('year', 'month', 'day').
 select('arr_delay', 'dep_delay').
 summarize(arr = 'mean(arr_delay, na.rm=TRUE)',
           dep = 'mean(dep_delay, na.rm=TRUE)').
 filter('arr > 30 | dep > 30'))
Run Code Online (Sandbox Code Playgroud)


szx*_*zxk 6

我认为你正在寻找应用于groupby对象的agg函数.

来自文档:

In [48]: grouped = df.groupby('A')

In [49]: grouped['C'].agg([np.sum, np.mean, np.std])
Out[49]: 
          sum      mean       std
A                                
bar  0.443469  0.147823  0.301765
foo  2.529056  0.505811  0.96
Run Code Online (Sandbox Code Playgroud)

  • 这似乎更多的是评论而不是答案.但另一方面,没有提供可重复的例子,所以....也许.作为R用户,我很高兴看到`agg`-function与R聚合函数不太相似. (3认同)

Raf*_*íaz 5

在 python 中使用 dplyr 最相似的方法是使用 dfply 包。这是一个例子。

Rdplyr

library(nycflights13)
library(dplyr)

flights %>%
  filter(hour > 10) %>% # step 1
  mutate(speed = distance / (air_time * 60)) %>% # step 2
  group_by(origin) %>% # step 3a
  summarize(mean_speed = sprintf("%0.6f",mean(speed, na.rm = T))) %>% # step 3b
  arrange(desc(mean_speed)) # step 4

# A tibble: 3 x 2
  origin mean_speed
  <chr>  <chr>     
1 EWR    0.109777  
2 JFK    0.109427  
3 LGA    0.107362 
Run Code Online (Sandbox Code Playgroud)

Python dfply

from dfply import *
import pandas as pd

flight_data = pd.read_csv('nycflights13.csv')

(flight_data >>
  mask(X.hour > 10) >> # step 1
  mutate(speed = X.distance / (X.air_time * 60)) >> # step 2
  group_by(X.origin) >> # step 3a
  summarize(mean_speed = X.speed.mean()) >> # step 3b
  arrange(X.mean_speed, ascending=False) # step 4
)


Out[1]: 
  origin  mean_speed
0    EWR    0.109777
1    JFK    0.109427
2    LGA    0.107362
Run Code Online (Sandbox Code Playgroud)

蟒蛇熊猫

flight_data.loc[flight_data['hour'] > 10, 'speed'] = flight_data['distance'] / (flight_data['air_time'] * 60)
result = flight_data.groupby('origin', as_index=False)['speed'].mean()
result.sort_values('speed', ascending=False)

Out[2]: 
  origin     speed
0    EWR  0.109777
1    JFK  0.109427
2    LGA  0.107362
Run Code Online (Sandbox Code Playgroud)

:如需了解更多信息,您可以查看以下链接