在pandas数据框中,是否有类似于R data.table中使用“by”的等效方法?
例如,在R中我可以这样做:
DT = data.table(x = c('a', 'a', 'a', 'b', 'b', 'b'), y = rnorm(6))
DT[, z := mean(y[1:2]), by = x]
在pandas中有类似的功能吗?
在pandas数据框中,是否有类似于R data.table中使用“by”的等效方法?
例如,在R中我可以这样做:
DT = data.table(x = c('a', 'a', 'a', 'b', 'b', 'b'), y = rnorm(6))
DT[, z := mean(y[1:2]), by = x]
data.table
中类似的输出,即按 'x' 分组并获取 'y' 的第一个元素,并创建一个新列 'z',那么:mean1 = lambda x: x.head(2).mean()
df['z'] = df['y'].groupby(df['x']).transform(mean1)
print(df)
# x y z
#0 a 1.329212 0.279589
#1 a -0.770033 0.279589
#2 a -0.316280 0.279589
#3 b -0.990810 -1.030813
#4 b -1.070816 -1.030813
#5 b -1.438713 -1.030813
使用原帖中的data.table
代码在R
中
library(data.table)
DT[, z := mean(y[1:2]), by = x]
DT
# x y z
#1: a 1.329212 0.2795895
#2: a -0.770033 0.2795895
#3: a -0.316280 0.2795895
#4: b -0.990810 -1.0308130
#5: b -1.070816 -1.0308130
#6: b -1.438713 -1.0308130
import pandas as pd
import numpy as np
from numpy import random
np.random.seed(seed=24)
df = pd.DataFrame({'x': ['a', 'a', 'a', 'b', 'b', 'b'],
'y': random.randn(6)})
DT <- structure(list(x = c("a", "a", "a", "b", "b", "b"),
y = c(1.329212,
-0.770033, -0.31628, -0.99081, -1.070816, -1.438713)), .Names = c("x",
"y"), class = c("data.table", "data.frame"),
row.names = c(NA, -6L))
df.groupby('x')['y'].mean()
。 - jezraelrmagic
单元格在R和Python之间执行操作,并在同一个笔记本中在两个环境之间“推拉”变量 - 非常酷! - n1k31t4