【发布时间】:2020-05-09 23:35:20
【问题描述】:
示例数据帧
> 0 location_day payType Name ratePay elapsedSeconds
> 1 2019-12-10 PRE Amy 12.25 199
> 2 2019-12-12 PRE Amy 12.25 7
> 3 2019-12-17 PRE Amy 12.25 68
> 4 2019-12-17 RP Amy 8.75 62
对于每一天,求和 elapsedSeconds 并计算总 toPay (elapsedSeconds * ratePay) 的新列,但应用“上限”elapsedSeconds 120。对于只有 1 个 payType 的任何一天,应用上限以便仅使用 120计算“toPay”列。
但是……
另外,groupby payType 这样如果一天有 2 个唯一的“payTypes”,则将 elapsedSeconds 相加以确定它是否超过上限 (120),如果是,则从最后一个 payType 中减去 elapsedSeconds 以得出总和等于 120。
所以我想要这个输出:
> 0 location_day payType Name ratePay elapsedSeconds
> 1 2019-12-10 PRE Amy 12.25 120
> 2 2019-12-12 PRE Amy 12.25 7
> 3 2019-12-17 PRE Amy 12.25 68
> 4 2019-12-17 RP Amy 8.75 52
我不太确定如何处理这个问题,实际上只执行了一些非常基本的分组和测试,使用条件语句计算新列,例如
finDfcalc1 = finDf.sort('location_day').groupby(flds)['elapsedSeconds'].sum().reset_index()
finDfcalc1.loc[finDfcalc1['elapsedSeconds'] < 120, 'elapsedSecondsOverage'] = finDfcalc1['elapsedSeconds'] * 1
finDfcalc1.loc[finDfcalc1['elapsedSeconds'] > 120, 'elapsedSecondsOverage'] = finDfcalc1['elapsedSeconds'] - 120
finDfcalc1['toPay'] = finDfcalc1['ratePay'] * finDfcalc1['elapsedSecondsOverage']
所有这些都不必是单行的,只要弄清楚逻辑就会非常高兴。非常感谢所有建议和想法。
【问题讨论】:
标签: pandas pandas-groupby