【发布时间】:2019-10-20 22:04:47
【问题描述】:
我正在尝试根据几个条件对数据框进行分组。
数据框:
Start Date End Date value
1971-07-01 1971-07-31 0.0
1971-08-01 1971-08-31 0.25
1971-09-01 1971-09-30 -0.62
1971-10-01 1971-10-31 0.0
1971-11-01 1971-11-30 -0.63
1971-12-01 1971-12-31 -1.0
1972-01-01 1972-01-31 0.0
1972-02-01 1972-02-29 0.0
1972-03-01 1972-03-31 2.0
1972-04-01 1972-04-30 0.0
.
.
1973-07-01 1973-07-31 2.0
1973-08-01 1973-08-31 0.5
1973-09-01 1973-09-30 -2.0
1973-10-01 1973-10-31 0.0
1973-11-01 1973-11-30 0.0
1973-12-01 1973-12-31 0.0
1974-01-01 1974-01-31 0.0
1974-02-01 1974-02-28 0.0
.
.
.
1974-11-01 1974-11-30 0.0
1974-12-01 1974-12-31 -1.25
1975-01-01 1975-01-31 -1.0
1975-02-01 1975-02-28 -1.0
1975-03-01 1975-03-31 -0.5
1975-04-01 1975-04-30 -0.25
1975-05-01 1975-05-31 0.0
1975-06-01 1975-06-30 1.25
1975-07-01 1975-07-31 0.0
1975-08-01 1975-08-31 0.0
分组标准
组应始终以负值开头
组只要我们有负值就继续
如果我们达到正值或三个连续的零,则该组结束。
上述数据框中的示例 1
1971-09-01 1971-09-30 -0.62
1971-10-01 1971-10-31 0.0
1971-11-01 1971-11-30 -0.63
1971-12-01 1971-12-31 -1.0
1972-01-01 1972-01-31 0.0
1972-02-01 1972-02-29 0.0
示例 2(在这种情况下,我们达到了 3 个连续的零)
1973-09-01 1973-09-30 -2.0
1973-10-01 1973-10-31 0.0
1973-11-01 1973-11-30 0.0
1973-12-01 1973-12-31 0.0
示例 3(在这种情况下我们达到了正值)
1974-12-01 1974-12-31 -1.25
1975-01-01 1975-01-31 -1.0
1975-02-01 1975-02-28 -1.0
1975-03-01 1975-03-31 -0.5
1975-04-01 1975-04-30 -0.25
1975-05-01 1975-05-31 0.0
我没有任何代码,因为我仍在研究如何将条件放入 groupby 或任何其他有效的方法来做到这一点。
我尝试了 for 循环,但我不会去任何地方。
for i in df.index:
no = 0
if df['Value'][i] < 0:
df['groupno'] = no
分组后,我想获取分组第一列的开始日期和分组最后一列的结束日期。
预期结果(来自示例):
Start Date End Date
1971-09-01 1972-02-29
1973-09-01 1973-12-31
1974-12-01 1975-05-31
感谢阅读。
【问题讨论】:
标签: python pandas dataframe group-by