我有一个具有以下结构的DataFrame:
df = df.set_index('timestamp')
print(df.head())
timestamp id value
2018-12-31 23:00:00 5c8fea84763aae175afda38b 98.587768
2018-12-31 23:10:00 5c8fea84763aae175afda38b 107.232742
2018-12-31 23:20:00 5c8fea84763aae175afda38b 104.224153
2018-12-31 23:30:00 5c8fea84763aae175afda38b 104.090750
2018-12-31 23:40:00 5c8fea84763aae175afda38b 99.357023
我需要获取一个具有每日最大值和最小值以及平均值的新DataFrame。我获取此数据没有问题,并且可以这样操作:
df = df.resample('D').agg(['min', 'max', 'mean'], columns=['value'])
问题是我丢失了列 id ,我需要它来将新数据存储在数据库中。
这是我通过打印新的DataFrame的标题得到的输出:
timestamp min max mean
2018-12-31 98.587768 107.641060 103.522250
2019-01-01 88.396180 109.506622 100.135128
2019-01-02 85.857570 112.420754 99.839120
2019-01-03 87.565014 113.419561 99.734654
2019-01-04 88.902704 112.186989 99.764259
如您所见,我丢失了 id 字段。
答案 0 :(得分:5)
将字典传递到$members=FamilyMember->join(DB::raw('(SELECT family_member_id, SUM(amount) AS sum_of_charges
FROM subscription_charge
WHERE family_member_id = x
GROUP BY family_member_id
// (or HAVING family_member_id = x ?)
) charges'),
function($join)
{
$join->on('FamilyMember.id', '=', 'charges.family_member_id');
})
->select(
'FamilyMember.id',
'charges.sum_of_charges'
)
->where('sum_of_charges', '>', 'Y')
})->get();
以聚合多个列。对于“ ID”,请采用 first 值进行汇总。
这是一个例子:
agg
如果您愿意,可以通过传递元组来重命名输出列:
df.resample('D').agg({'id': 'first', 'value': ['mean', 'max']})
id value
first mean max
timestamp
2018-12-31 5c8fea84763aae175afda38b 102.698487 107.232742
另请参阅Multiple aggregations of the same column using pandas GroupBy.agg()。