Groupby.transform不DASK数据框中工作
问题描述:
我使用以下dask.dataframe AID
:Groupby.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
在每一行中。我的问题是,如果不支持转换,是否有另一种方法可以达到相同的结果?
答
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
或更快的解决方案通过汇总Series
或dict
:
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
相关:https://stackoverflow.com/questions/19267029/why -pandas-transform-fails-if-you-only-have-a-single-column – EdChum
嗨,埃德,在链接中说上面应该有你的工作有两列,我确实有两列,它确实工作与一个熊猫数据框。我的问题是我有一个dask数据框,似乎不支持转换。有没有一种方法可以在不使用变换的情况下实现变换? – BKS
我对dask dfs没有经验,这是否工作:'AID.groupby('AID')[[''ANumOfF']]。transform('sum')'?这在熊猫的土地将强制一个单独的df被称为 – EdChum