如何将平面项目/列表转换为Pandas数据帧

时间:2014-10-21 20:45:22

标签: python database pandas dataframe transformation

我目前正在尝试从数据库中抓取的结果创建一个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

有关快速转换此数据的想法吗?我是熊猫新手,有点卡住了。

1 个答案:

答案 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