将pandas数据帧分组,然后通过聚合获取abs的平均值

时间:2018-04-23 13:03:52

标签: python pandas

我无法弄清楚如何执行以下操作:

我们说我有一个包含3列的pandas数据框,for ($i = 0; $i < count($req_id); $i++) { $did = DB::table('ssrareqs')->select('particular_id', 'quantity_req', 'purpose', 'date_applied', 'quantity_issued', 'remarks', 'status_issue', 'status_req') ->where('req_id', $req_id[$i]) ->first(); if ($did) { array_push($temp_particular_id,$did->particular_id); array_push($temp_quantity_req,$did->quantity_req); array_push($temp_purpose,$did->purpose); array_push($temp_date_applied,$did->date_applied); array_push($temp_quantity_issued,$did->quantity_issued); array_push($temp_remarks,$did->remarks); array_push($temp_status_issue,$did->status_issue); array_push($temp_status_req,$did->status_req); } } AB

我想先按C进行分组,然后对AB进行汇总。我们假设我想要C meanB max,我可以这样做:

C

但我想要做的是取{C}的import pandas as pd df = pd.DataFrame({'A' : ['a', 'a', 'b', 'b'], 'B' :[50, 70, 50, 30] , 'C' : [100, -150, -110, 180] }) df.groupby("A").agg({"B":"mean", "C":"max"}) max

我尝试了各种方式,包括this answer中描述的方式,但不知何故,它从未给我我想要的东西。我相信这有一个简单的答案......我做错了什么?

预期的输出当然是

  

C A
     a 60 150
     b 40 180

1 个答案:

答案 0 :(得分:1)

我认为需要定制功能:

df1 = df.groupby("A").agg({"B":"mean", "C":lambda x: x.abs().max()})
print (df1)
     C   B
A         
a  150  60
b  180  40

另一个解决方案是assign后面的abs值列:

df1 = df.assign(C = lambda x: x['C'].abs()).groupby("A").agg({"B":"mean", "C":"max"})

<强>详细

print (df.assign(C = lambda x: x['C'].abs()))
   A   B    C
0  a  50  100
1  a  70  150
2  b  50  110
3  b  30  180