我有一个按照日期
排序的数据框:
df = pd.DataFrame({'idx': [1, 1, 1, 2, 2, 2],
'date': ['2016-04-30', '2016-05-31', '2016-06-31',
'2016-04-30', '2016-05-31', '2016-06-31'],
'val': [10, 0, 5, 10, 0, 0],
'pct_val': [None, -10, None, None, -10, -10]})
df = df.sort('date')
print df
date idx pct_val val
3 2016-04-30 2 NaN 10
0 2016-04-30 1 NaN 10
4 2016-05-31 2 -10 0
1 2016-05-31 1 -10 0
5 2016-06-31 2 -10 0
2 2016-06-31 1 NaN 5
我希望你能按照 idx
进行分组,然后应用一个累积函数,并进行一些简单的逻辑处理。如果 pct_val
为 null,则将 val
添加到累加总和中;否则,将累加总和乘以 1 + pct_val/100
。 'cumsum'
显示了 df.groupby('idx').val.cumsum()
的结果,'cumulative_func'
是我想要的结果。
date idx pct_val val cumsum cumulative_func
3 2016-04-30 2 NaN 10 10 10
0 2016-04-30 1 NaN 10 10 10
4 2016-05-31 2 -10 0 10 9
1 2016-05-31 1 -10 0 10 9
5 2016-06-31 2 -10 0 10 8
2 2016-06-31 1 NaN 5 15 14
您好!请问有没有办法对数据框应用自定义的累计函数或更好的方法来实现这一点?
pct_change()
函数或者shift()
吗?很可能你需要一个可以传入数据框并执行逻辑并返回结果的方法。你可以使用apply()
对单个列进行计算。 - ctrl-alt-delete