我无法弄清楚如何执行以下操作:
我们说我有一个包含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);
}
}
,A
和B
。
我想先按C
进行分组,然后对A
和B
进行汇总。我们假设我想要C
mean
和B
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
答案 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
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