2017-04-04 57 views
4

我使用以下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

回答

5

我認爲你可以使用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