我如何操作Dask';谁是小组成员?
我有下表我如何操作Dask';谁是小组成员?,dask,Dask,我有下表 value category 0 2 A 1 20 B 2 4 A 3 40 B 我想添加一个mean列,其中包含每个类别的值的平均值 value category mean 0 2 A 3.0 1 20 B 30.0 2 4 A 3.0 3 40 B 30.0 我可以在
value category
0 2 A
1 20 B
2 4 A
3 40 B
我想添加一个mean
列,其中包含每个类别的值的平均值
value category mean
0 2 A 3.0
1 20 B 30.0
2 4 A 3.0
3 40 B 30.0
我可以在熊猫身上这样做
p = pd.DataFrame({"value":[2, 20, 4, 40], "category": ["A", "B", "A", "B"]})
groups = []
for _, group in p.groupby("category"):
group.loc[:,"mean"] = group.loc[:,"value"].mean()
groups.append(group)
pd.concat(groups).sort_index()
我如何在达斯克做同样的事情
我不能按原样使用pandas函数,因为不能在Dask中枚举groupby对象。这个
import dask.dataframe as dd
d = dd.from_pandas(p, chunksize=100)
list(d.groupby("category"))
引发KeyError:“未找到列:0”
我可以使用apply
函数计算Dask中的平均值
import dask.dataframe as dd
d = dd.from_pandas(p, chunksize=100)
q = d.groupby(["category"]).apply(lambda group: group["value"].mean(), meta="object")
q.compute()
返回
category
A 3.0
B 30.0
dtype: float64
但我不知道如何将它们折叠回原始表的行中。我将使用合并来实现此操作:
导入dask.dataframe作为dd
作为pd进口熊猫
df=pd.DataFrame({
“值”:[2,20,4,40],
'类别':['A','B','A','B']
})
ddf=dd.from_熊猫(df,npartitions=1)
#惰性计算每个类别的平均值
按类别平均值=(ddf
.groupby(“类别”)
.agg({'value':'mean'})
.rename(列={'value':'mean'})
).persist()
按类别的平均值。头()
#将“平均值”分配给每个相应类别
ddf=ddf.merge(按类别平均,左=类别,右=真)
ddf.head()
然后输出:
category value mean
0 A 2 3.0
2 A 4 3.0
1 B 20 30.0
3 B 40 30.0
我将使用合并来实现此操作:
导入dask.dataframe作为dd
作为pd进口熊猫
df=pd.DataFrame({
“值”:[2,20,4,40],
'类别':['A','B','A','B']
})
ddf=dd.from_熊猫(df,npartitions=1)
#惰性计算每个类别的平均值
按类别平均值=(ddf
.groupby(“类别”)
.agg({'value':'mean'})
.rename(列={'value':'mean'})
).persist()
按类别的平均值。头()
#将“平均值”分配给每个相应类别
ddf=ddf.merge(按类别平均,左=类别,右=真)
ddf.head()
然后输出:
category value mean
0 A 2 3.0
2 A 4 3.0
1 B 20 30.0
3 B 40 30.0