2017-09-05 78 views
-1

我從SAP HANA SQL獲得了這段代碼,我需要將它轉換爲熊貓。 熊貓可能嗎?因爲我還沒有找到任何這種情況的例子。 這是一個虛擬代碼,所以請略過縮進和命名約定部分。在pandas中使用groupby計算聚合數據

select distinct 
    "A","B","C","D", 
    to_nvarchar(sum(to_decimal("Column2"))/TO_DECIMAL(max("Column3"))) as "Column2" ,to_nvarchar(min(to_date("Date",'YYYYMMDD')),'YYYYMMDD') as "Date", 

    from :Var1 
    group by 
    "A","B","C","D"; 

我想:

df4["Column2"]=df4.Column2.astype(int)  
df4["Column2"]=df4["Column2"]/df4["Column3"].groupby(["A","B","C","D"]).agg({' 
Colum‌​n2': 'sum','Colum‌​n3':'max'}).reset_index() 
df5=df4[["A","B","C","D","Colum‌​n3"]] 

我得到KeyError異常 「A」

INPUT TABLE: 
A B  C  D  Column2 Column3 date 
BOE MT1 TYPE1 50000  45 5  20111231 
BOE MT1 TYPE1 50000  35 1  20101201 
BOE MT1 TYPE1 50001  85 5  20110721 
BOE MT1 TYPE4 50000  25 5  20110718 
BOE MT1 TYPE4 50001  90 5  20111212 





A B C  D Column2   date 
BOE MT1 TYPE1 50000 16 <-(45+35)/5 20101201 
BOE MT1 TYPE1 50001 17 <-85/5  20110721 
BOE MT1 TYPE4 50000 5 <-25/5  20110718 
BOE MT1 TYPE4 50001 18 <- 90/5  20111212 
+0

是的,這可能。文檔中有足夠的示例可幫助您開始:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.agg.html – MedAli

+0

正常最小,最大,總和可以找到2列的最大/總和並將它們分開,我們如何執行 – SWATKAT

+0

來劃分兩列df [「C」] = df [「A」]。div(df [「B」])或df [「C」] = df [「A」]/df [「B」] – MedAli

回答

0

IIUC,一個groupbyapply應該這樣做

out = df1.groupby(['A', 'B', 'C', 'D'])\ 
      .apply(lambda x: x.Column2.sum()/x.Column3.max())\ 
      .reset_index() 
print(out) 

    A B  C  D  0 
0 BOE MT1 TYPE1 50000 16.0 
1 BOE MT1 TYPE1 50001 17.0 
2 BOE MT1 TYPE4 50000 5.0 
3 BOE MT1 TYPE4 50001 18.0 
+0

我在列表()處收到錯誤。 關鍵錯誤:B 我也編輯了這個問題,因爲我想知道我們如何在熊貓中進行多重計算我沒有得到任何正確的語法。 – SWATKAT

+0

@SarthakSrivastava用您的前四個列名替換「列表(ABCD)」。 –

+0

@COLDSPEED是我只使用我的列名,它將如何區分List()中的不同列ABCD? 例如:如果列名是 - > sarthak,coldspeed,stack 因此它應該根據你的邏輯列出('sarthakcoldspeedstack')? – SWATKAT