python - 合并列(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)
解决方案
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
推荐阅读
- sql-server - Windows 10 PC 无法列出 SQL Server 实例
- sql - PostgreSQL: How to return a subarray dynamically using array slices in postgresql
- java - Cloud Firestore Unit Testing Java
- javascript - Sequential programming with setTimeout in JavaScript?
- unix - 通过终端打开 Rstudio 时出错
- android - 在默认音乐播放器中播放原始音频文件
- linux-kernel - 中断参数:设备树配置?
- java - JBoss EAP 7.1.6、CDI 1.2 和排除扫描不起作用
- python - 从命令行运行的程序,但不是从 pyinstaller 创建的可执行文件
- java - InaccessibleObjectException after migrating from Java 8 to Java 11