我目前正在尝试从数据库中抓取的结果创建一个pandas DataFrame。从DB中最有效地检索数据如下所示:
(
("First", datetime.date(2014,10,5), 1.1),
("First", datetime.date(2014,10,4), 1.2),
("First", datetime.date(2014,10,3), 1.3),
("First", datetime.date(2014,10,2), 1.4),
("Second", datetime.date(2014,10,5), 2.1),
("Second", datetime.date(2014,10,4), 2.2),
("Second", datetime.date(2014,10,3), 2.3),
("Second", datetime.date(2014,10,2), 2.4),
("Third", datetime.date(2014,10,5), 3.1),
("Third", datetime.date(2014,10,4), 3.2),
("Third", datetime.date(2014,10,3), 3.3),
("Third", datetime.date(2014,10,2), 3.4),
)
目标是使行中的第一个值为DF列,行中的第二个值为DF中的索引,第三个值为该值。 E.g:
First Second Third
datetime.date(2014,10,5) 1.1 2.1 3.1
datetime.date(2014,10,4) 1.2 2.2 3.2
datetime.date(2014,10,3) 1.3 2.3 3.3
datetime.date(2014,10,2) 1.4 2.4 3.4
有关快速转换此数据的想法吗?我是熊猫新手,有点卡住了。
答案 0 :(得分:2)
df.pivot
可以将列值(例如第一列)移动到列中(并将列值(例如日期)移动到索引中):
import datetime as DT
import pandas as pd
data = [("First", DT.date(2014, 10, 5), 1.1),
("First", DT.date(2014, 10, 4), 1.2),
("First", DT.date(2014, 10, 3), 1.3),
("First", DT.date(2014, 10, 2), 1.4),
("Second", DT.date(2014, 10, 5), 2.1),
("Second", DT.date(2014, 10, 4), 2.2),
("Second", DT.date(2014, 10, 3), 2.3),
("Second", DT.date(2014, 10, 2), 2.4),
("Third", DT.date(2014, 10, 5), 3.1),
("Third", DT.date(2014, 10, 4), 3.2),
("Third", DT.date(2014, 10, 3), 3.3),
("Third", DT.date(2014, 10, 2), 3.4), ]
df = pd.DataFrame(data, columns=['cols', 'date', 'val'])
df = df.pivot(columns='cols', index='date')
df.columns = df.columns.droplevel(0)
print(df)
产量
cols First Second Third
date
2014-10-02 1.4 2.4 3.4
2014-10-03 1.3 2.3 3.3
2014-10-04 1.2 2.2 3.2
2014-10-05 1.1 2.1 3.1