1 回答
TA贡献1797条经验 获得超6个赞
想法是系列.str.拆分列到新的,所以可能重复索引值的差值按年。还用于将每个索引值的所有年份范围相加:DataFrame
df = 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 Years
0 Paris red 2010
1 Paris red 2011
2 Paris red 2012
3 Rome orange 2019
4 Rome orange 2020
5 New York blue 2015
6 New York blue 2016
7 New York blue 2017
8 New York blue 2018
9 Tokyo purple 2002
10 Tokyo purple 2003
另一个使用 DataFrame.explode 和列表理解的解决方案,用于多年来范围中的第一个字符和最后一个字符:44
original['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 Years
0 Paris red 2010
1 Paris red 2011
2 Paris red 2012
3 Rome orange 2019
4 Rome orange 2020
5 New York blue 2015
6 New York blue 2016
7 New York blue 2017
8 New York blue 2018
9 Tokyo purple 2002
10 Tokyo purple 2003
添加回答
举报