首页 > 解决方案 > 合并列(1 月、2 月、3 月等)。

问题描述

我正在尝试将列中的月份与年份组合成行。在这里,我将月份写成一月、二月和三月,将年份写成行:

年, 一月, 二月, 三月
2017, 1, 2, 3
2018, 1, 2, 3
2019, 1, 2, 3


我想将它们组合成下面写的日期格式:


日期、值

2017-01-01, 1
2017-02-01, 2
2017-03-01, 3
2018-01-01, 1
2018-02-01, 2
2018-03-01, 3

到目前为止,我已经尝试了 iloc 方法,但我无法弄清楚如何将它放入我想要的数据框中。

任何帮助,将不胜感激。

对于范围内的 i(len(df)):
y=df.iloc[i]
j.append(y)

标签: pythondataframe

解决方案


df = df.set_index(['Year'])
df
    January February  March
Year            
2017    1     2       3
2018    1     2       3
2019    1     2       3

将单词中的月份转换为int

df.columns = pd.to_datetime(pd.Series(df.columns), format='%B').dt.month
df
        1   2   3
Year            
2017    1   2   3
2018    1   2   3
2019    1   2   3

使用堆栈获取“列作为行”

   Year level_1 0
0   2017    1   1
1   2017    2   2
2   2017    3   3
3   2018    1   1
4   2018    2   2
5   2018    3   3
6   2019    1   1
7   2019    2   2
8   2019    3   3

然后你可以Date通过连接得到必要的格式化

df['Date'] = pd.to_datetime(df['Year'].astype(str)
                            + '-' + df['level_1'].astype(str)
                            + '-' + str(1))
df = (df
      .rename(columns={0:'Value'})
      .drop(['Year', 'level_1'], axis=1)
      .reindex(['Date', 'Value'], axis=1)
     )
df

        Date    Value
0   2017-01-01  1
1   2017-02-01  2
2   2017-03-01  3
3   2018-01-01  1
4   2018-02-01  2
5   2018-03-01  3
6   2019-01-01  1
7   2019-02-01  2
8   2019-03-01  3

推荐阅读