使用python查找特定行的所有日期

使用python查找特定行的所有日期,python,pandas,Python,Pandas,我的数据帧至少有300000行,因此这些不是有效的解决方案。有没有更有效的解决方案 注:开始和结束为年度、月度、每日……格式。我已经给出了一个年度示例。也许温家宝可以使用stack和groupby range 如果对数据进行了排序,您可以尝试查找end+1的第一个实例,例如2006和2008,然后你可以得到数据,直到索引-1开始和结束是yyyy格式的日期。你说可以,但对于不同的格式,如yyyymm格式,它不会得到我的ansi有不同的格式。它只适用于YY这种格式。我有yyyymm和yymmdd格式

我的数据帧至少有300000行,因此这些不是有效的解决方案。有没有更有效的解决方案

注:开始和结束为年度、月度、每日……格式。我已经给出了一个年度示例。

也许温家宝可以使用stack和groupby range


如果对数据进行了排序,您可以尝试查找end+1的第一个实例,例如2006和2008,然后你可以得到数据,直到索引-1开始和结束是yyyy格式的日期。你说可以,但对于不同的格式,如yyyymm格式,它不会得到我的ansi有不同的格式。它只适用于YY这种格式。我有yyyymm和yymmdd格式,这个解决方案也不适用me@raam设置索引'id'。applylambda x:x.str[:4]你能解释一下它的作用吗actually@raam仅获取年份零件号我必须获取类似于此的数据alsoid开始结束日期1 201809 201812 id数据1 201809 1 201810 1 201811 1 201812
id start end
1  2001  2005
2  2004  2007

output 
id date
1  2001
1  2002
1  2003
1  2004
1  2005
2  2004
2  2005
2  2006
2  2007

my logics
df=pd.concat([pd.DataFrame({'start': pd.date_range(row.start, row.end, freq='AS'),
               'id': row.id}, columns=['start', 'id']) 
           for i, row in df.iterrows()], ignore_index=True)

df1 = (pd.concat([pd.Series(r.id, pd.date_range(r.start, r.end, freq='AS')) for r in df.itertuples()]) .reset_index()) 
df.set_index('id').stack().groupby(level=0).apply(lambda x : pd.Series(list(range(x.iloc[0],x.iloc[1]+1)))).reset_index()
Out[746]: 
   id  level_1     0
0   1        0  2001
1   1        1  2002
2   1        2  2003
3   1        3  2004
4   1        4  2005
5   2        0  2004
6   2        1  2005
7   2        2  2006
8   2        3  2007