Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Pandas - Fatal编程技术网

Python 基于数据帧值创建数组

Python 基于数据帧值创建数组,python,arrays,pandas,Python,Arrays,Pandas,如果我有一个id,开始日期=1988,结束日期=2018,值=21100,我想创建一个数组或数据框,其中日期为1988-2018,即(198819891990…2018),每个日期=值为21100 所以我基本上想要的东西看起来像: date, id1, id2 1988, 21100,0 1989, 21100,0 1990,21000 ,0 ... 1994,21100,4598 ... 2013,21100,4598 ... 2018,21100,0 我怎么能这样做?我希望数组根据开始日期

如果我有一个id,开始日期=1988,结束日期=2018,值=21100,我想创建一个数组或数据框,其中日期为1988-2018,即(198819891990…2018),每个日期=值为21100 所以我基本上想要的东西看起来像:

date, id1, id2
1988, 21100,0
1989, 21100,0
1990,21000 ,0
...
1994,21100,4598
...
2013,21100,4598
...
2018,21100,0
我怎么能这样做?我希望数组根据开始日期开始填充值,并根据结束日期结束填充。我有多个id(268),我希望它们通过添加一个新列(id2、id3…id268)循环每个id。例如,id2从1994年开始到2013年,其值为4598

编辑:

example = pd.DataFrame({
'id': ['id1', 'id2', 'id3', 'id4'],
'start date': ['1988', '1988', '2000', '2005'],
'end date': ['2018', '2013', '2005', '2017'],
'value': [2100, 4568, 7896, 68909]
}) 
print (example)
    id start date end date  value
0  id1       1988     2018   2100
1  id2       1988     2013   4568
2  id3       2000     2005   7896
3  id4       2005     2017  68909
您可以在列表理解中创建
系列
,并通过以下方式将它们连接在一起:替换缺少的值,转换为整数,最后将索引转换为列
日期

L = [pd.Series(v, index=range(int(s), int(e)+1)) for s,e,v in 
     zip(example['start date'], example['end date'], example['value'])]
df1 = (pd.concat(L, axis=1, keys=example['id'])
         .fillna(0)
         .astype(int)
         .rename_axis('date')
         .reset_index())


DataFrame
构造函数与
范围一起使用

start = 1988
end = 2019
val = 21100
df = pd.DataFrame({'date':range(start, end),
                   'id1': val})

编辑:

您可以在列表理解中创建
系列
,并通过以下方式将它们连接在一起:替换缺少的值,转换为整数,最后将索引转换为列
日期

L = [pd.Series(v, index=range(int(s), int(e)+1)) for s,e,v in 
     zip(example['start date'], example['end date'], example['value'])]
df1 = (pd.concat(L, axis=1, keys=example['id'])
         .fillna(0)
         .astype(int)
         .rename_axis('date')
         .reset_index())


DataFrame
构造函数与
范围一起使用

start = 1988
end = 2019
val = 21100
df = pd.DataFrame({'date':range(start, end),
                   'id1': val})


我没有使用1988年和2018年,而是可以通过某种方式将其与变量的开始日期和结束日期联系起来。因为我有多个id(268),我希望它们通过添加一个新列(id2、id3…id268)循环每个id。例如,id2从1994年到2013年开始,值为4598。@Tamarie-输入数据在列表中?在字典里?因为
我有多个id(268),我希望他们在每个id中循环添加一个新列(id2、id3…id268)…
我编辑了这个问题。希望它更有意义。输入数据位于dataframe@Tamarie-所以输入数据帧是
df=pd.dataframe({'start':[1988,1994],'end':[20182013],'val':[21000,4598]})
对于所讨论的输出数据帧?我有多个行/标识符,我举了一个例子,它们只是两个。如果我遵循这一点,则必须手动输入每个标识的值,而不是使用1988和2018,是否有办法将其与变量的开始日期和结束日期相关联。因为我有多个id(268),我希望它们通过添加一个新列(id2、id3…id268)循环每个id。例如,id2从1994年到2013年开始,值为4598。@Tamarie-输入数据在列表中?在字典里?因为
我有多个id(268),我希望他们在每个id中循环添加一个新列(id2、id3…id268)…
我编辑了这个问题。希望它更有意义。输入数据位于dataframe@Tamarie-所以输入数据帧是
df=pd.dataframe({'start':[1988,1994],'end':[20182013],'val':[21000,4598]})
对于所讨论的输出数据帧?我有多个行/标识符,我举了一个例子,它们只是两个。如果我遵循此操作,则必须手动输入每个标识符的值