大熊猫转动/堆叠/重塑

时间:2017-08-01 13:59:55

标签: python pandas

我尝试将数据导入到pandas DataFrame中,其中列为日期字符串,标签,值。我的数据如下所示(只有4个日期和5个标签)

from numpy import random
import numpy as np
import pandas as pd

# Creating the data
dates = ("2015-01-01", "2015-01-02", "2015-01-03", "2015-01-04")
values = [random.rand(5) for _ in range(4)]

data = dict(zip(dates,values))

因此,数据是一个字典,其中键是日期,键是一个值列表,其中索引是标签。

将此数据结构加载到DataFrame

df1 = pd.DataFrame(data)

将日期作为列,将标签作为索引,将值作为值。

另一种加载方式是

df2 = pd.DataFrame()
df2.from_dict(data, orient='index')

其中日期为索引,列为标签。

在任何一种情况下,我都可以设置旋转或堆叠到我的首选视图。

我应该如何接近旋转/堆叠以获得我想要的视图?或者我应该在将数据结构加载到DataFrame之前更改我的数据结构?特别是我希望通过使用一串zip调用来避免必须事先创建表的所有行。

1 个答案:

答案 0 :(得分:2)

IIUC:

选项1
pd.DataFrame.stack

pd.DataFrame(data).stack() \
    .rename('value').rename_axis(['label', 'date']).reset_index()

    label        date     value
0       0  2015-01-01  0.345109
1       0  2015-01-02  0.815948
2       0  2015-01-03  0.758709
3       0  2015-01-04  0.461838
4       1  2015-01-01  0.584527
5       1  2015-01-02  0.823529
6       1  2015-01-03  0.714700
7       1  2015-01-04  0.160735
8       2  2015-01-01  0.779006
9       2  2015-01-02  0.721576
10      2  2015-01-03  0.246975
11      2  2015-01-04  0.270491
12      3  2015-01-01  0.465495
13      3  2015-01-02  0.622024
14      3  2015-01-03  0.227865
15      3  2015-01-04  0.638772
16      4  2015-01-01  0.266322
17      4  2015-01-02  0.575298
18      4  2015-01-03  0.335095
19      4  2015-01-04  0.761181

选项2
理解

pd.DataFrame(
    [[i, d, v] for d, l in data.items() for i, v in enumerate(l)],
    columns=['label', 'date', 'value']
)

    label        date     value
0       0  2015-01-01  0.345109
1       1  2015-01-01  0.584527
2       2  2015-01-01  0.779006
3       3  2015-01-01  0.465495
4       4  2015-01-01  0.266322
5       0  2015-01-02  0.815948
6       1  2015-01-02  0.823529
7       2  2015-01-02  0.721576
8       3  2015-01-02  0.622024
9       4  2015-01-02  0.575298
10      0  2015-01-03  0.758709
11      1  2015-01-03  0.714700
12      2  2015-01-03  0.246975
13      3  2015-01-03  0.227865
14      4  2015-01-03  0.335095
15      0  2015-01-04  0.461838
16      1  2015-01-04  0.160735
17      2  2015-01-04  0.270491
18      3  2015-01-04  0.638772
19      4  2015-01-04  0.761181