对熊猫使用重新采样和聚合时丢失字符串列

时间:2019-04-19 20:43:51

标签: python pandas

我有一个具有以下结构的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 字段。

1 个答案:

答案 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()