2017-09-05 80 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