Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在大熊猫中传播射程日期_Python_Pandas_Numpy - Fatal编程技术网

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
by
level=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