亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Python中為日期范圍內的每年創建新行?

在Python中為日期范圍內的每年創建新行?

拉莫斯之舞 2022-09-13 15:14:35
我有一個數據幀,其中每行都有一個年份范圍。這是構建它的代碼。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   YearsParis     red       2010-2012Rome      orange    2019-2020New York  blue      2015-2018Tokyo     purple    2002-2003我想在“年”范圍內為每年創建一個新行。數據幀應如下所示。City    Color   YearsParis     red       2010Paris     red       2011...New York  blue      2018Tokyo     purple    2002Tokyo     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)
查看完整描述

1 回答

?
FFIVE

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


查看完整回答
反對 回復 2022-09-13
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號