我正在尝试根据该数据帧中的两个预先存在的列附加一个pandas数据帧。我遇到的问题是pandas数据帧的索引是对象格式,而不是整数格式。为了使事情变得更复杂,我只想附加一定范围的数据帧,将新列中的剩余单元格保留为“NaN'”。为了只附加一定范围的数据帧,我将不得不使用" for"环。
这是我的问题:当我有对象索引时,如何在数据帧的某个范围内循环?
我的初始pandas数据帧只是......
import pandas as pd
dates = ['2005Q4','2006Q1','2006Q2','2006Q3','2006Q4','2007Q1','2007Q2']
col1 = [ 5.9805, 6.2181, 6.3508, 6.7878, 6.6212, 6.4583, 6.4068 ]
col2 = [ 'NaN', -0.001054985938, -0.121731711952, 0.046275331889,
-0.017517211963, -0.023422842422, 0.009072170884 ]
data = pd.DataFrame(
{
'col1': col1,
'col2': col2
},
columns = [
'col1',
'col2'
],
index = dates
)
我试图做的就是这样......
data['col3'] = 'NaN'
for i in range('2006Q1','2006Q4',1):
data['col3'][i] = data['col1'][i-1] +\
data['col2'][i]
天真地,我曾希望python能够将索引中的对象名称与与该特定indice关联的实际索引号相关联。例如,如果我将索引定义为给定,python将能够知道' 2005Q4'是index = 0,' 2006Q1'是index = 1等。通过这种方式,我可以在range()函数中使用对象字符串,它仍然可以知道我所指的整数。但是,情况似乎并非如此。
我还需要避免将对象转换为日期格式。重要的是我将索引保持为#Year; YearQuarter'格式,我还没有找到一种使用能够执行此操作的pd.to_datetime的简单方法。
有没有人对如何在python中仅循环某些范围的基于对象的索引有任何建议?
答案 0 :(得分:0)
将.index()
与列表一起使用会返回您要查找的项目的索引。尝试将此调整发送到for
循环。
for i in range(dates.index('2006Q1'),dates.index('2006Q4'),1):
显然,更有效的方法可以做到这一点。 .shift()
会根据您的需要向上或向下移动整个列:
data['col3'] = data.col1 - data.col2.shift(-1)