date value pointName pointNr connectedPoint ownerName
2018-05-08 2.039373e+08 Miami_1 P-00068 Point_1 Owner_1
2018-05-09 2.546125e+08 Miami_1 P-00068 Point_1 Owner_1
2018-05-09 2.546010e+08 Miami_2 P-00066 Point_1 Owner_2
2018-05-08 2.037412e+08 Miami_2 P-00066 Point_1 Owner_2
2018-05-09 7.142878e+08 New_York_1 P-00211 Point_2 Owner_3
2018-05-08 6.567392e+08 New_York_1 P-00211 Point_2 Owner_3
2018-05-08 6.567392e+08 New_York_2 P-00188 Point_2 Owner_4
2018-05-09 7.141274e+08 New_York_3 P-00126 Point_2 Owner_2
2018-05-09 7.142878e+08 New_York_2 P-00188 Point_2 Owner_4
2018-05-08 6.566841e+08 New_York_3 P-00126 Point_2 Owner_2
2018-05-08 0.000000e+00 Boston_1 P-00081 Point_3 Owner_4
2018-05-08 0.000000e+00 Boston_2 P-00105 Point_3 Owner_5
2018-05-09 6.987462e+07 Boston_2 P-00105 Point_3 Owner_5
2018-05-09 7.000680e+07 Boston_1 P-00081 Point_3 Owner_4
上面的片段或多或少是以下内容的结果:
rng = pd.DataFrame(my_df[['date', 'value', 'pointName', 'pointNr', 'connectedPoint', 'ownerName]].sort_values('connectedPoint').reset_index(drop=True))
rng.head(14)
我获得了全年的数据。在此示例中,我选择了两天(2018-05-08和2018-05-09)
我想计算一个时间范围内的总和(这里是两天),但是每天只计算每个connectedPoint的最大值。
2018年5月8日的伪数学写作示例:
sum(max {Point1} + max {Point2} + max {Point3})
= 2.039373e + 08 + 6.567392e + 08 +…
最后,我们将每一天(day1 + day2 + day3…)的值(即之前计算出的总和)相加,得出一个最终值。
我使用groupby尝试了不同的方法,以及以下方法的变体:
rng['date'] = pd.to_datetime(rng['date'])
rng.index = rng['date']
rng.resample('D').max()
对不起,我是python和pandas的新手。我在网上搜索过,但即使对于许多人来说,这里的情况很明显,我仍然找不到解决方案。我被卡住了。
谢谢!
答案 0 :(得分:1)
使用DataFrame.groupby + DataFrame.unstack
df1=df.groupby(['date','connectedPoint'])['value'].max().unstack()
print(df1)
connectedPoint Point_1 Point_2 Point_3
date
2018-05-08 203937300.0 656739200.0 0.0
2018-05-09 254612500.0 714287800.0 70006800.0
按日期获取总金额:
sum_date=df1.sum(axis=1)
print(sum_date)
date
2018-05-08 8.606765e+08
2018-05-09 1.038907e+09
dtype: float64
获取总金额:
sum_tot=sum_date.sum()
print(sum_tot)
1899583600.0