Groupby.transform不DASK数据框中工作

问题描述:

我使用以下dask.dataframe AIDGroupby.transform不DASK数据框中工作

AID FID ANumOfF 
0 1 X  1 
1 1 Y  5 
2 2 Z  6 
3 2 A  1 
4 2 X  11 
5 2 B  18 

我知道在熊猫数据帧我可以使用:

AID.groupby('AID')['ANumOfF'].transform('sum') 

得到:

0  6 
1  6 
2 36 
3 36 
4 36 
5 36 

我想与dask.dataframes一样使用它,它通常使用与pandas da相同的函数taframe,但在这种情况下给了我以下错误:

AttributeError: 'SeriesGroupBy' object has no attribute 'transform' 

这既可以是两两件事,要么DASK不支持它,或者是因为我使用python 3?

我尝试下面的代码:

AID.groupby('AID')['ANumOfF'].sum() 

但只是给了我各组这样的总和:我需要的是为上述其中重复的和

AID 
1  6 
2 36 

在每一行中。我的问题是,如果不支持转换,是否有另一种方法可以达到相同的结果?

+0

相关:https://stackoverflow.com/questions/19267029/why -pandas-transform-fails-if-you-only-have-a-single-column – EdChum

+0

嗨,埃德,在链接中说上面应该有你的工作有两列,我确实有两列,它确实工作与一个熊猫数据框。我的问题是我有一个dask数据框,似乎不支持转换。有没有一种方法可以在不使用变换的情况下实现变换? – BKS

+0

我对dask dfs没有经验,这是否工作:'AID.groupby('AID')[[''ANumOfF']]。transform('sum')'?这在熊猫的土地将强制一个单独的df被称为 – EdChum

我认为你可以使用join:与map

s = AID.groupby('AID')['ANumOfF'].sum() 
AID = AID.set_index('AID').drop('ANumOfF', axis=1).join(s).reset_index() 
print (AID) 
    AID FID ANumOfF 
0 1 X  6 
1 1 Y  6 
2 2 Z  36 
3 2 A  36 
4 2 X  36 
5 2 B  36 

或更快的解决方案通过汇总Seriesdict

s = AID.groupby('AID')['ANumOfF'].sum() 
#a bit faster 
#s = AID.groupby('AID')['ANumOfF'].sum().to_dict() 
AID['ANumOfF'] = AID['AID'].map(s) 
print (AID) 
    AID FID ANumOfF 
0 1 X  6 
1 1 Y  6 
2 2 Z  36 
3 2 A  36 
4 2 X  36 
5 2 B  36