Python 基于数据帧值创建数组
如果我有一个id,开始日期=1988,结束日期=2018,值=21100,我想创建一个数组或数据框,其中日期为1988-2018,即(198819891990…2018),每个日期=值为21100 所以我基本上想要的东西看起来像: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 我怎么能这样做?我希望数组根据开始日期
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]})
对于所讨论的输出数据帧?我有多个行/标识符,我举了一个例子,它们只是两个。如果我遵循此操作,则必须手动输入每个标识符的值