python - 间隔中的天数总和

标签 python pandas intervals

我有一个 pandas 数据框如下:

ID      Start        End
1  2013-03-03 2013-04-05
2  2013-03-03 2013-04-05
3  2012-03-02 2012-05-05
4  2013-03-01 2013-04-04
5  2013-02-25 2013-06-05
6  2012-02-26 2012-05-05
7  2013-02-25 2013-04-27
8  2012-02-26 2012-03-01
9  2013-03-22 2013-03-25
10 2013-06-27 2013-07-01

有没有办法汇总每个 ID 每个时间间隔的每个月发生的天数:年份。

我试图获得的输出是每个月所有天数的总和:每个 ID 贡献的年份。

因此,ID1 将持续 29 天至 2013 年 3 月和 5 天至 2013 年 4 月; ID3 将贡献 30 天至 2012 年 3 月、30 天至 2012 年 4 月和 5 天至 2012 年 5 月。 等等……

如果您能提供帮助,在此先感谢您。

最佳答案

这是一个糟糕的方法:

In [11]: df1.apply(lambda x: pd.Series(1, pd.date_range(x.loc['Start'], x.loc['End'] - pd.offsets.Day(1), freq='D')).resample('M', how='sum'), axis=1).fillna(0)
Out[11]: 
    2012-02-29  2012-03-31  2012-04-30  2012-05-31  2013-02-28  2013-03-31  2013-04-30  2013-05-31  2013-06-30
ID                                                                                                            
1            0           0           0           0           0          29           4           0           0
2            0           0           0           0           0          29           4           0           0
3            0          30          30           4           0           0           0           0           0
4            0           0           0           0           0          31           3           0           0
5            0           0           0           0           4          31          30          31           4
6            4          31          30           4           0           0           0           0           0
7            0           0           0           0           4          31          26           0           0
8            4           0           0           0           0           0           0           0           0
9            0           0           0           0           0           3           0           0           0
10           0           0           0           0           0           0           0           0           4

为了分解它,对于每一行,我们通过为开始和结束之间的每一天创建一系列 1 来计算每个月的天数,然后使用重新采样对每个月的它们求和:

In [12]: x = df1.iloc[0]

In [13]: x
Out[13]: 
Start   2013-03-03 00:00:00
End     2013-04-05 00:00:00
Name: 1, dtype: datetime64[ns]


In [14]: pd.Series(1, pd.date_range(x['Start'], x['End'] - pd.offsets.Day(1), freq='D')).resample('M', how='sum')
Out[14]: 
2013-03-31    29
2013-04-30     4
Freq: M, dtype: int64

关于python - 间隔中的天数总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20087042/

相关文章:

PostgreSQL 区间减法

python - 如何在Python(Pandas/Numpy)中进行简单的跨列分类?

python - 查找正在导入的 python 模块

python - 使用不同的扩展名轮换日志

Python 格式化工具

python - 使用 pandas 数据框绘制(帮助)

python - 将 Numpy 数组转换为 Pandas DataFrame

javascript - angularjs 间隔应用 rootscope 中的更改

r - 在字符中拆分间隔日期并在 R 中转换为日期

Python 确保 x 是 int,而不是讨厌的 float