【发布时间】:2016-01-18 02:40:06
【问题描述】:
我有一个如下所示的数据框:
id start end diff mindiff
1 2015-01-02 2015-07-01 180 57
2 2015-02-03 2015-05-12 98 56
3 2015-01-15 2015-01-20 5 5
4 2015-02-04 2015-04-15 70 55
5 2015-03-15 2015-05-01 47 46
6 2015-02-22 2015-03-01 7 7
7 2015-03-21 2015-04-12 22 22
8 2015-04-11 2015-06-15 65 50
9 2015-04-11 2015-05-01 20 20
10 2015-03-30 2015-04-01 2 2
11 2015-04-28 2015-06-15 48 33
12 2015-05-01 2015-06-01 31 31
13 2015-05-10 2015-06-09 30 30
14 2015-05-19 2015-07-01 43 42
15 2015-06-01 2015-06-06 5 5
16 2015-06-02 2015-06-29 27 27
17 2015-04-29 2015-05-21 22 22
18 2015-05-25 2015-07-01 37 36
19 2015-06-04 2015-06-26 22 22
20 2015-06-21 2015-07-01 10 10
21 2015-05-30 2015-06-06 7 7
22 2015-06-30 2015-07-01 1 1
字段为 id、start(日期)、end(日期)、diff(开始和结束之间的天数)、mindiff(最小值(diff 和距离开始 x 个月后的最后一天)。
在这种情况下,x 为 1(因此比开始日期“晚”一个月)
我想要完成的是找到 mindiff 的平均值(平均值),按“结束”的年/月分组,但仅对每个组具有“开始”年/月 x 的记录进行平均(上面定义的)几个月前到groupedby 月份。来自上述数据集的示例,id 1 只会在 2015/1 和 2015/1+x (2015/2) 年/月进行平均。
这是一个表格,标记了每条记录以及我希望在哪个月份进行平均:
Months
id 1 2 3 4 5 6 7
1 1 1
2 1 1
3 1
4 1 1
5 1 1
6 1 1
7 1 1
8 1 1
9 1 1
10 1 1
11 1 1
12 1 1
13 1 1
14 1 1
15 1
16 1
17 1 1
18 1 1
19 1
20 1 1
21 1 1
22 1 1
这是我正在寻找的 mindiffs 和由此产生的 AVG/月:
Months
id 1 2 3 4 5 6 7
1 57 57
2 56 56
3 5
4 55 55
5 46 46
6 7 7
7 22 22
8 50 50
9 20 20
10 2 2
11 33 33
12 31 31
13 30 30
14 42 42
15 5
16 27
17 22 22
18 36 36
19 22
20 10 10
21 7 7
22 1 1
AVG 31 43.8 31.3 27.9 30.1 21.1 5.5
最后,这是我正在寻找的数据框:
Month Avg Diff Trailing x months
2015-01 31
2015-02 43.75
2015-03 31.33333333
2015-05 27.85714286
2015-05 30.11111111
2015-06 21.1
2015-07 5.5
我知道这可以通过循环实现,但我的直觉认为 GROUPBY 更符合 Python 风格并且可能更高效。但是,我如何才能在“结束”年/月的 groupby 中仅获得“开始”月份的特定滚动 mindiff 值。谢谢您的帮助。
【问题讨论】:
标签: python pandas group-by dataframe mean