首页 > 解决方案 > 如何更改熊猫日期框列

问题描述

我有这样的熊猫日期框:

import pandas as pd
price_data=pd.read_csv('data.csv')  
9   CHART_EQUITY    1585151291564   SUBS    seq chart-sequence  2624
10  CHART_EQUITY    1585151291564   SUBS    key symbol  SPY
11  CHART_EQUITY    1585151291564   SUBS    1   chart-time  244.7099
12  CHART_EQUITY    1585151291564   SUBS    2   open-price  245.14
13  CHART_EQUITY    1585151291564   SUBS    3   high-price  244.35
14  CHART_EQUITY    1585151291564   SUBS    4   low-price   244.97
15  CHART_EQUITY    1585151291564   SUBS    5   close-price 193629.0
16  CHART_EQUITY    1585151291564   SUBS    6   volume  287
17  CHART_EQUITY    1585151291564   SUBS    7   chart-time  1585151220000
18  CHART_EQUITY    1585151291564   SUBS    8   chart-day   18346

1585151291564 是时间戳,我想使用时间戳作为索引并将数据转换为这种列格式:

timestamp      open-price   high-price   low-price   close-price volume
1585151291564  245.14       244.35       244.97      244.97

有朋友可以帮忙吗?

标签: pythonpandas

解决方案


对于将来,您应该确保包含一个最低限度的工作示例。试图帮助您的人无法立即运行您的代码并获得您正在使用的确切数据框。但是我尝试在下面重新创建它并使用pivot_table, 作为@G。安德森建议,进行我认为你所要求的转变。

import pandas as pd
import numpy as np

data = np.array(
      [['open-price', 1, 245.14],
       ['high-price', 1, 244.35],
       ['low-price', 1, 244.97],
       ['close-price', 1, 244.97],
       ['open-price', 2, 246.14],
       ['high-price', 2, 245.35],
       ['low-price', 2, 245.97],
       ['close-price', 2, 245.97]]
)

df = pd.DataFrame(data, columns=['price-label', 'timestamp', 'price'])
df['timestamp'] = df['timestamp'].astype('float')
df['price'] = df['price'].astype('float')

df

   price-label  timestamp   price
0   open-price        1.0  245.14
1   high-price        1.0  244.35
2    low-price        1.0  244.97
3  close-price        1.0  244.97
4   open-price        2.0  246.14
5   high-price        2.0  245.35
6    low-price        2.0  245.97
7  close-price        2.0  245.97

newdf = pd.pivot_table(df, index='timestamp', columns='price-label')

newdf

                  price                                
price-label close-price high-price low-price open-price
timestamp                                              
1.0              244.97     244.35    244.97     245.14
2.0              245.97     245.35    245.97     246.14

要摆脱列上的 MultiIndex,您可以删除第一级。

newdf = newdf.droplevel(axis=1, level=0)

newdf
price-label  close-price  high-price  low-price  open-price
timestamp                                                  
1.0               244.97      244.35     244.97      245.14
2.0               245.97      245.35     245.97      246.14

推荐阅读