python - Pandas 数据框 - 将具有多个元素的时间序列转换为以元素为列的扁平数据框
问题描述
我有一个存储在数据框中的时间序列数据集,其中包含多个元素,例如股票及其价格、市盈率和市盈率 - 所以每个股票代码/日期有 3 行。我想知道是否有一种方法可以转换它,所以每个股票/日期都有一行,价格、p/e 和 p/b 作为列。
示例数据框:
import pandas as pd
dfts = pd.DataFrame({
'date': ['2020-01-01','2020-01-01','2020-01-01',
'2020-01-01','2020-01-01','2020-01-01',
'2020-01-02','2020-01-02','2020-01-02',
'2020-01-02','2020-01-02','2020-01-02'],
'ticker': ['AAPL','AAPL','AAPL',
'GOOGL','GOOGL','GOOGL',
'AAPL', 'AAPL', 'AAPL',
'GOOGL', 'GOOGL', 'GOOGL'],
'type': ['price','p/e','p/b',
'price','p/e','p/b',
'price','p/e','p/b',
'price','p/e','p/b'],
'value': [300,20,2,
1000,25,3,
310,21,2.1,
1110,26,2.9]
})
print(dfts)
我正在寻找转换它并得到如下结果:
Date Ticker Price P/E P/B
2020-01-01 AAPL 300 20 2
2020-01-02 AAPL 310 21 2.1
2020-01-01 GOOGL 1000 25 3
2020-01-02 GOOGL 1110 26 2.6
谢谢
解决方案
如果对您有帮助,请检查以下几行
将熊猫导入为 pd
dfts = pd.DataFrame({
'date': ['2020-01-01','2020-01-01','2020-01-01',
'2020-01-01','2020-01-01','2020-01-01',
'2020-01-02','2020-01-02','2020-01-02',
'2020-01-02','2020-01-02','2020-01-02'],
'ticker': ['AAPL','AAPL','AAPL',
'GOOGL','GOOGL','GOOGL',
'AAPL', 'AAPL', 'AAPL',
'GOOGL', 'GOOGL', 'GOOGL'],
'type': ['price','p/e','p/b',
'price','p/e','p/b',
'price','p/e','p/b',
'price','p/e','p/b'],
'value': [300,20,2,
1000,25,3,
310,21,2.1,
1110,26,2.9]
})
df = dfts.set_index(['date','ticker','type'])['value'].unstack().reset_index()
print(df)
输出帧是这样的——
推荐阅读
- python - 如何轻松地将迭代解决方案转换为递归解决方案?
- c++ - 有没有更简洁的方法将方法绑定到`this`(而不是包装在`this`-capturing lambda中)?
- android - 默认情况下在我的 android 应用中启用所有通知设置
- javascript - 当在前台反应本机时,推送通知会出错
- rest - 为什么参考不能正常工作?
- android - 当视图是 RN 中的绝对位置时,可触摸不可点击
- python - 为什么验证准确率保持在 75% 而训练准确率是 100%?
- python - python 包安装在 pipenv 中,但说没有找到模块
- javascript - 如何使用toggle_visibility隐藏div然后在点击时显示另一个div
- android-studio - 如何运行谷歌新的“places_compat_compatify.sh”兼容性脚本?