python - 有没有办法找到当前行中金额不为0的日期之前的最后一个日期?
问题描述
我有一个熊猫数据框,例如:
Date, Amount
01/01/2020, 10
01/02/2020, 15
01/03/2020, 0
01/04/2020, 11
01/05/2020, 0
01/06/2020, 15
01/07/2020, 12
...
我想添加一个新列(即“之前”),显示自上次 0 金额以来的天数。例如
Date, Amount, Before
01/01/2020, 10, 0
01/02/2020, 15, 0
01/03/2020, 0, 0
01/04/2020, 11, 1
01/05/2020, 0, 0
01/06/2020, 15, 1
01/07/2020, 12, 2
...
有任何想法吗?
先感谢您
解决方案
您可以创建 helper Series 以与连续 sum byAmount
进行比较,过滤出第一组并为每组的行创建Series by和,然后从以前的天数中减去天数:0
Series.cumsum
first
0
GroupBy.transform
GroupBy.first
0
df['Date'] = pd.to_datetime(df['Date'])
g = df['Amount'].eq(0).cumsum()
first = df.groupby(g[g > 0])['Date'].transform('first')
df['Before'] = df['Date'].sub(first).dt.days.fillna(0).astype(int)
print (df)
Date Amount Before
0 2020-01-01 10 0
1 2020-01-02 15 0
2 2020-01-03 0 0
3 2020-01-04 11 1
4 2020-01-05 0 0
5 2020-01-06 15 1
6 2020-01-07 12 2
推荐阅读
- node.js - Taiko 不等待navigationTimeout 完成
- asp.net-core - OpenId connect 为 Azure AD 外部登录生成的状态太长
- reactjs - 将滚动条限制在反应网格中的特定高度
- ibm-mq - quarkus + java mq 客户端 + com.sun.jmx.mbeanserver.JmxMBeanServer
- html - 出于与运行 Safari 的第一代 iPad 的兼容性原因,将 JavaScript 重写为 jQuery
- reactjs - 状态更新后反应原生不重新渲染屏幕
- javascript - 反应状态挂钩数组元素不更新状态
- reactjs - ReactDOMServer.renderToString() 返回空 html
- elasticsearch - Elasticsearch 搜索 - 使用 ngram 标记器搜索字段,其中包括直接排序的字符
- xcode - XCode 构建成功但无法在 Artifacts 中找到 .ipa 文件