python - 来自现有 pandas 数据框列的 MultiIndex 列
问题描述
我正在尝试将我的 pandas 数据框重新索引为按列的 MultiIndex。我探索过的大多数答案似乎只能按行回答。我现在的df
样子是这样的:
ticker calendardate eps price ps revenue
0 ABNB 2019-12-31 -2.59 NaN NaN 4.80
1 ABNB 2020-12-31 -16.12 146.80 25.962 3.37
2 AMZN 2019-12-31 23.46 1847.84 3.266 2.80
3 AMZN 2020-12-31 42.64 3256.93 4.233 3.86
我想要一个基于的 MultiIndex,calendardate
以便我的输出看起来像这样:
ticker eps price ps revenue
2019 2020 2019 2020 2019 2020 2019 2020
0 ABNB -2.59 -16.12 NaN 146.80 NaN 25.962 4.80 3.37
1 AMZN 23.46 42.64 1847.84 3256.93 3.266 4.233 2.80 3.86
任何帮助,将不胜感激。谢谢
解决方案
我们可以使用分隔符周围的str.split
列拆分,然后用于选择拆分列的年份部分,现在将数据框的索引设置为列,然后提取然后重塑。calenderdate
-
str[0]
ticker
year
unstack
y = df['calendardate'].str.split('-', n=1).str[0]
df.drop('calendardate', 1).set_index(['ticker', y]).unstack()
如果dtype
of 列calendardate
是,datetime
那么我们可以改为使用:
y = df['calendardate'].dt.year
df.drop('calendardate', 1).set_index(['ticker', y]).unstack()
eps price ps revenue
calendardate 2019 2020 2019 2020 2019 2020 2019 2020
ticker
ABNB -2.59 -16.12 NaN 146.80 NaN 25.962 4.8 3.37
AMZN 23.46 42.64 1847.84 3256.93 3.266 4.233 2.8 3.86
推荐阅读
- c# - Unity C# 代码正在工作,然后当我保存它停止工作
- windows - 尽管在命令行中输入了值,但带有强制参数的 powershell 脚本一直提示我输入值
- java - Java - 使用扫描仪读取文本文件并存储它,给我空的 ArrayList。使用分隔符拆分单词
- database - Best approach for Cassandra Partitioning
- ios - 您可以拥有多个 iOS 应用程序使用相同的 Firebase 后端吗?
- ssh - OpenSSH 服务器不为来自不同 IP 的客户端提供相同的身份验证方法
- oracle - 检查约束以强制执行参照完整性?
- android - 更新应用程序时,哪些应用程序更改会导致重新安装/替换?
- python - 有限的数据集:离线增强与具有更多时期的在线增强
- javascript - Mongoose search using regex and ignoring special characters