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)
我认为你正在寻找应用于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)
在 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)
注:如需了解更多信息,您可以查看以下链接。