我正在使用一个具有不同产品的数据框(每个产品在此数据框中具有不同的产品参考号“ PR”),并且它们在一定的时间范围内工作。
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame({
'PR':("1","2","3","4","5","18"),
'StartDate':pd.date_range('1/1/2011', periods=6, freq='D'),
'EndDate':np.random.choice( pd.date_range('1/1/2011', periods=365,
freq='D'), 6, replace=False)
})
哪个表格会打印出来
PR StartDate EndDate
0 1 2011-01-01 2011-03-01
1 2 2011-01-02 2011-11-06
2 3 2011-01-03 2011-01-10
3 4 2011-01-04 2011-10-27
4 5 2011-01-05 2011-08-31
5 18 2011-01-06 2011-06-06
我想查找任何给定月份有多少种产品在这种情况下(在这种情况下:(2011-01,1个产品还可以使用),(2011-02,5个产品还可以使用),(2011-04,4个产品还可以使用)等等...该怎么办?
答案 0 :(得分:1)
如果给定的产品在StartDate
,EndDate
范围内,则可以每月检查一次。
In [26]: pd.Series(
{dt: ((df.StartDate <= dt) & (df.EndDate >= dt)).sum()
for dt in pd.date_range(start='2011-01-01', freq='1MS', periods=6)})
Out[26]:
2011-01-01 1
2011-02-01 5
2011-03-01 5
2011-04-01 4
2011-05-01 4
2011-06-01 4
dtype: int64
答案 1 :(得分:0)
这是另一种方式:
df.assign(dates = [pd.date_range(s,f, freq='MS') for s, f in zip(df['StartDate'], df['EndDate'])])\
.explode('dates').groupby('dates')['PR'].nunique()
输出:
dates
2011-01-01 1
2011-02-01 5
2011-03-01 5
2011-04-01 4
2011-05-01 4
2011-06-01 4
2011-07-01 3
2011-08-01 3
2011-09-01 2
2011-10-01 2
2011-11-01 1
Name: PR, dtype: int64