猿问

在Python中为日期范围内的每年创建新行?

我有一个数据帧,其中每行都有一个年份范围。这是构建它的代码。


original = pd.DataFrame({'City': ['Paris','Rome','New York', 'Tokyo'], 'Color': ['red', 'orange', 'blue', 'purple'], 'Years': ['2010-2012', '2019-2020', '2015-2018', '2002-2003']})

该表如下所示。


City    Color   Years

Paris     red       2010-2012

Rome      orange    2019-2020

New York  blue      2015-2018

Tokyo     purple    2002-2003

我想在“年”范围内为每年创建一个新行。数据帧应如下所示。


City    Color   Years

Paris     red       2010

Paris     red       2011

...

New York  blue      2018

Tokyo     purple    2002

Tokyo     purple    2003

这就是我现在正在使用的代码。我试图为每年添加一个新行,但它只返回一个空的数据帧,我不知道为什么。


df_empty = pd.DataFrame({'City': [], 'Color': [], 'Years': []})


for index, row in original.iterrows():

    dates = [int(s) for s in row['Years'].split("-") if s.isdigit()]

    for i in range(dates[0],dates[1] + 1):

        newrow = row

        newrow.append(pd.Series([str(i)]))

        df_empty.add(newrow)


拉莫斯之舞
浏览 80回答 1
1回答

FFIVE

想法是系列.str.拆分列到新的,所以可能重复索引值的差值按年。还用于将每个索引值的所有年份范围相加:DataFramedf = original['Years'].str.split('-', expand=True).astype(int)original['Years'] = df[0]df = original.loc[original.index.repeat(df[1] - df[0] + 1)]df['Years'] += df.groupby(level=0).cumcount()df = df.reset_index(drop=True)print (df)        City   Color  Years0      Paris     red   20101      Paris     red   20112      Paris     red   20123       Rome  orange   20194       Rome  orange   20205   New York    blue   20156   New York    blue   20167   New York    blue   20178   New York    blue   20189      Tokyo  purple   200210     Tokyo  purple   2003另一个使用 DataFrame.explode 和列表理解的解决方案,用于多年来范围中的第一个字符和最后一个字符:44original['Years'] = [[y for y in range(int(x[:4]), int(x[-4:]) + 1)]                         for x in original['Years']]original = original.explode('Years').reset_index(drop=True)print (original)        City   Color Years0      Paris     red  20101      Paris     red  20112      Paris     red  20123       Rome  orange  20194       Rome  orange  20205   New York    blue  20156   New York    blue  20167   New York    blue  20178   New York    blue  20189      Tokyo  purple  200210     Tokyo  purple  2003
随时随地看视频慕课网APP

相关分类

Python
我要回答