Python中的plyr或dplyr

2024-04-25 13:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这更多的是一个概念性的问题,我没有具体的问题。

我正在学习python进行数据分析,但是我非常熟悉R——R的一个重要特性是plyr(当然还有ggplot2)和更好的dplyr。熊猫当然也有分裂申请,但在R我可以做的事情,如(在dplyr,有点不同的普利尔,我现在可以看到dplyr如何模仿。来自对象编程的符号)

   data %.% group_by(c(.....)) %.% summarise(new1 = ...., new2 = ...., ..... newn=....)

其中我同时创建多个摘要计算

在python中我该怎么做,因为

df[...].groupby(.....).sum() only sums columns, 

在R上,一个调用可以有一个平均数、一个和、一个特殊函数等

我意识到我可以分别执行所有操作并将它们合并,如果我使用python,这是很好的,但是当涉及到选择工具时,您不必键入、检查和验证的任何一行代码都会及时累积起来

此外,在dplyr中,您还可以添加变异语句,因此在我看来,它的功能更强大—所以我对熊猫或Python缺少的是什么-

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


Tags: 对象databy编程group符号特性事情
3条回答

可以简单地使用Python中的dplyr。

rpy2(随rpy2-2.7.0一起引入)中有一个到dplyr的接口,允许您编写如下内容:

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

有一个example in the documentation。医生的这部分也是一本笔记本。查找页面顶部附近的链接。

这个问题的另一个答案是比较R的dplyr和pandas(见@lgallen)。在rpy2与dplyr的接口中,相同的R-one-liner-chaining 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)

Python+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'))

我也是R的dplyr的忠实粉丝,我正在努力提高我对熊猫的认识。既然你没有什么特别的问题,我建议你看看下面的帖子,它分解了整个介绍性的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)

以下是熊猫的实施:

flights.groupby(['year', 'month', 'day'])
   [['arr_delay', 'dep_delay']]
   .mean()
   .query('arr_delay > 30 | dep_delay > 30')

关于如何在原来的岗位上与熊猫实施类似dplyr的操作还有很多比较。 http://nbviewer.ipython.org/gist/TomAugspurger/6e052140eaa5fdb6e8c0

我认为您正在寻找agg function,它应用于groupby对象。

从文档中:

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

相关问题 更多 >