pandas - 增量添加 pandas 列值
问题描述
我有一个这样的数据框:
id trade_id tradedate settledate amt
3136 6828 20200616 20200630 15000000.0
3136 6934 20200616 20200630 15000000.0
3136 7007 20200618 20200630 30000000.0
3136 7050 20200620 20200630 25000000.0
3137 7091 20200612 20200630 25000000.0
3137 7092 20200615 20200630 25000000.0
我想执行两件事。
当交易发生在特定日期时添加之前的金额。例如:对于 id 3136 2 交易发生在 6 月 16 日、下一个 18 日和下一个 20 日。所以输出将是:
id tradedate amt
3136 20200616 30000000
3136 20200618 60000000
3136 20200620 85000000
3137 20200612 25000000
3137 20200615 50000000
下一个任务是找出缺失的日期并填写最后计算的 amt。所以最终输出将是这样的:
id tradedate amt
3136 20200616 30000000
3136 20200617 30000000
3136 20200618 60000000
3136 20200619 60000000
3136 20200620 85000000
3137 20200612 25000000
3137 20200613 25000000
3137 20200614 25000000
3137 20200615 50000000
我怎样才能以有效的方式实现这一目标?试过这个:
df_agg = df_joined.groupby(['id', 'tradedate'])[
'amt'].agg('sum').reset_index()
df_agg['cumsum'] = df_agg.groupby('id').amt.cumsum()
但无法在此处获取缺少的日期部分。任何帮助将不胜感激。
解决方案
用于groupby
获取总和id
,tradedate
但首先转换tradedate
为实际日期以进行上采样:
df['tradedate'] = pd.to_datetime(df['tradedate'], format='%Y%m%d')
>>> df.groupby(['id', 'tradedate'])['amt'].sum() \
.groupby('id').cumsum().reset_index(level=0) \
.resample('D').pad().reset_index()
tradedate id amt
0 2020-06-12 3137 25000000.0
1 2020-06-13 3137 25000000.0
2 2020-06-14 3137 25000000.0
3 2020-06-15 3137 50000000.0
4 2020-06-16 3136 30000000.0
5 2020-06-17 3136 30000000.0
6 2020-06-18 3136 60000000.0
7 2020-06-19 3136 60000000.0
8 2020-06-20 3136 85000000.0
推荐阅读
- sql - 尝试使用编码 (CCSID) 网络响应查询数据库
- django - 使用直通模型的 Django 自定义反向管理器
- javascript - Puppeteer:如何获取页面中发送/接收的总字节数
- pyspark-sql - 将三个数据框列组合成单个数据框
- android - 需要解释从适配器发送数据到片段
- angular - Angular 7:分页无法正常工作
- javascript - 如果取消警报,如何使 javascript 部分重复?
- python - 如何使用选择器来定位除第一个之外的所有目标
- security - 如何设置从 Access .accdb 文件到具有用户级安全性的 mdb 文件的链接?
- r - 如何在 SageMaker Notebook 实例上安装 R 包?