Groupby.transform 在 dask 数据帧中不起作用
Groupby.transform doesn't work in dask dataframe
我正在使用以下 dask.dataframe AID
:
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
我知道在 pandas 数据框中我可以使用:
AID.groupby('AID')['ANumOfF'].transform('sum')
获得:
0 6
1 6
2 36
3 36
4 36
5 36
我想与 dask.dataframes 一起使用,它通常使用与 pandas 数据框相同的功能,但在这种情况下会出现以下错误:
AttributeError: 'SeriesGroupBy' object has no attribute 'transform'
这可能是以下两种情况之一,要么是 dask 不支持它,要么是因为我使用的是 python 3?
我尝试了以下代码:
AID.groupby('AID')['ANumOfF'].sum()
但这只是给我每个组的总和:
AID
1 6
2 36
我需要像上面那样在每一行中重复求和。我的问题是,如果不支持转换,是否有其他方法可以达到相同的结果?
我想你可以使用 join
:
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
:
使用 map
更快的解决方案
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
目前Dask
supports transform , howerver there may be an issues with indexes (depending on original dataframe). see this PR #5327
所以你的代码应该可以工作
AID.groupby('AID')['ANumOfF'].transform('sum')
我正在使用以下 dask.dataframe AID
:
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
我知道在 pandas 数据框中我可以使用:
AID.groupby('AID')['ANumOfF'].transform('sum')
获得:
0 6
1 6
2 36
3 36
4 36
5 36
我想与 dask.dataframes 一起使用,它通常使用与 pandas 数据框相同的功能,但在这种情况下会出现以下错误:
AttributeError: 'SeriesGroupBy' object has no attribute 'transform'
这可能是以下两种情况之一,要么是 dask 不支持它,要么是因为我使用的是 python 3?
我尝试了以下代码:
AID.groupby('AID')['ANumOfF'].sum()
但这只是给我每个组的总和:
AID
1 6
2 36
我需要像上面那样在每一行中重复求和。我的问题是,如果不支持转换,是否有其他方法可以达到相同的结果?
我想你可以使用 join
:
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
:
map
更快的解决方案
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
目前Dask
supports transform , howerver there may be an issues with indexes (depending on original dataframe). see this PR #5327
所以你的代码应该可以工作
AID.groupby('AID')['ANumOfF'].transform('sum')