首页 > 解决方案 > 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

谢谢

标签: pythonpandasdataframe

解决方案


如果对您有帮助,请检查以下几行

将熊猫导入为 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)

输出帧是这样的——

在此处输入图像描述


推荐阅读