Python 在大熊猫中传播射程日期
我有一个带有值的“范围日期”列表。 例如:Python 在大熊猫中传播射程日期,python,pandas,numpy,Python,Pandas,Numpy,我有一个带有值的“范围日期”列表。 例如: Start End Value 1/1/2017 10/1/2017 10 5/1/2017 8/1/2017 20 12/1/2017 13/1/2017 40 我想要作为输出的是一个数据帧(熊猫),带有一个从2017年1月1日到2017年12月31日的日历,其中每个值都被添加到开始和结束之间的日期中。 我当前的解决方案是: 1) 创建日历数据框 2) 使用np.0对日期和每个范围日期进行迭代,可以将“值”添加到日历数
Start End Value
1/1/2017 10/1/2017 10
5/1/2017 8/1/2017 20
12/1/2017 13/1/2017 40
我想要作为输出的是一个数据帧(熊猫),带有一个从2017年1月1日到2017年12月31日的日历,其中每个值都被添加到开始和结束之间的日期中。我当前的解决方案是:
1) 创建日历数据框
2) 使用np.0对日期和每个范围日期进行迭代,可以将“值”添加到日历数据框中 你知道有没有其他方法可以解决这个问题 这是我想要的结果(dataframe有2列):
如果日期时间不重叠,则可以使用
DatetimeIndex
创建系列
,并通过以下方式添加年份日期时间的所有缺失值:
最后一个数据帧使用
rename\u axis
和reset\u index
:
df = s2.rename_axis('dates').reset_index(name='values')
print (df.head(15))
dates values
0 2017-01-01 10
1 2017-01-02 10
2 2017-01-03 10
3 2017-01-04 10
4 2017-01-05 30
5 2017-01-06 30
6 2017-01-07 30
7 2017-01-08 30
8 2017-01-09 10
9 2017-01-10 10
10 2017-01-11 0
11 2017-01-12 40
12 2017-01-13 40
13 2017-01-14 0
14 2017-01-15 0
你好,马塞洛,你能提供一份你想要得到的结果的摘录吗?此外,您所说的带有值的“范围日期”列表是什么意思?你是说python列表吗?你是说数据帧吗?不幸的是,它可能有重叠dates@Marcello-好的,如果重叠会发生什么?您需要聚合吗?这意味着如果
s
中相同日期时间的相同值需要value
s的平均值?我刚刚用一个示例进行了更新。对于重叠,我必须求和(或其他简单的运算)。这是有可能有重叠的,每对夫妇的日期,我们可以有任何values@Marcello-编辑答案,有聚合sum
bylevel=0
,它通过DatetimeIndex
菜单它工作(比我的解决方案更快)非常感谢
df['Start'] = pd.to_datetime(df['Start'], format='%d/%m/%Y')
df['End'] = pd.to_datetime(df['End'], format='%d/%m/%Y')
s = pd.concat([pd.Series(r.Value,pd.date_range(r.Start, r.End)) for r in df.itertuples()])
s = s.groupby(level=0).sum()
#print (s)
rng = pd.date_range('2017-01-01', '2017-12-31')
s2 = s.reindex(rng, fill_value=0)
print (s2.head(15))
2017-01-01 10
2017-01-02 10
2017-01-03 10
2017-01-04 10
2017-01-05 30
2017-01-06 30
2017-01-07 30
2017-01-08 30
2017-01-09 10
2017-01-10 10
2017-01-11 0
2017-01-12 40
2017-01-13 40
2017-01-14 0
2017-01-15 0
Freq: D, dtype: int64
df = s2.rename_axis('dates').reset_index(name='values')
print (df.head(15))
dates values
0 2017-01-01 10
1 2017-01-02 10
2 2017-01-03 10
3 2017-01-04 10
4 2017-01-05 30
5 2017-01-06 30
6 2017-01-07 30
7 2017-01-08 30
8 2017-01-09 10
9 2017-01-10 10
10 2017-01-11 0
11 2017-01-12 40
12 2017-01-13 40
13 2017-01-14 0
14 2017-01-15 0