【问题标题】:Pandas dataframe - convert time series with multiple elements, to a flattened dataframe with elements as columnsPandas 数据框 - 将具有多个元素的时间序列转换为以元素为列的扁平数据框
【发布时间】:2020-05-20 20:09:20
【问题描述】:

我有一个存储在数据框中的时间序列数据集,其中包含多个元素,例如股票及其价格、市盈率和市盈率 - 所以每个股票代码/日期有 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

谢谢

【问题讨论】:

  • 这称为枢轴。请阅读this question 并返回您的尝试。

标签: python pandas dataframe


【解决方案1】:

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

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

输出帧是这样的--

【讨论】:

  • 让我知道它是否按预期工作
  • 谢谢 Hietsh,太好了。感谢您的帮助。
  • 欢迎您,@Brian196 这是例外的答案,因为您要标记它
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2019-08-14
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多