Pandas 基于唯一值将单列转换为多列

Pandas 基于唯一值将单列转换为多列,pandas,Pandas,我有以下pandas.DataFrame和shape(1464,2): 索引列中的每个数据重复了4次:在名称列中,每个字符串一次 数据帧的头部和尾部如下所示: 头部 value name 2018-01-01 47 A 2018-01-02 22 A 2018-01-03 13 A 2018-01-04 66 A 2018-01-05 19 A 尾部 value name 2018-12-28 32 D 2018-12-29 1 D 2018-1

我有以下
pandas.DataFrame
和shape
(1464,2)

索引列中的每个数据重复了4次:在
名称
列中,每个字符串一次

数据帧的头部和尾部如下所示:

头部

value   name
2018-01-01  47  A
2018-01-02  22  A
2018-01-03  13  A
2018-01-04  66  A
2018-01-05  19  A 
尾部

    value   name
2018-12-28  32  D
2018-12-29  1   D
2018-12-30  5   D
2018-12-31  50  D
2019-01-01  75  D
我想将这个
(1464,2)
数据帧转换为形状
(366,4)
,这样4列中的每一列都是
df.name.unique()
(即.e
A,B,C,D
)中的4个唯一值。每列的值都是
df.value
列中相应的整数

最终的数据帧应该如下所示:

            A   B   C   D
2018-12-28  32  22  21  4
2018-12-29  1   16  2   12
2018-12-30  5   1   65  26
2018-12-31  50  92  21  75
2019-01-01  75  55  33  34

我确信必须有一个很好的reindex函数或类似的函数才能有效地执行任务,而不是循环和重新创建数据帧。

您可以使用pivot来完成

df=pd.DataFrame([('2018-01-01','47','A'),('2018-01-02','22','A'),('2018-01-03','13','A'),('2018-01-04','66','A'),('2018-01-05','19','A'),('2018-01-01','32','D'),('2018-01-02','1','D'),('2018-01-03','5','D'),('2018-01-01-04','50','D'),('2018-01-01-05','75','D'),列=('id','D'),'D'),'D'),名称='
df[“id”]=pd.to_datetime(df.id)
df.设置索引(“id”)
df.pivot(“id”,columns=“name”)
输出

    id  value   name
0   2018-01-01  47  A
1   2018-01-02  22  A
2   2018-01-03  13  A
3   2018-01-04  66  A
4   2018-01-05  19  A
5   2018-01-01  32  D
6   2018-01-02  1   D
7   2018-01-03  5   D
8   2018-01-04  50  D
9   2018-01-05  75  D


value
name    A   D
id      
2018-01-01  47  32
2018-01-02  22  1
2018-01-03  13  5
2018-01-04  66  50
2018-01-05  19  75
您可以使用以下选项:

df.pivot(columns='name',values='value')

可以在不使用多级索引数据框的情况下执行此操作?它不是多级索引,而是显示列名,您可以将其设置为空白,如
df.columns.rename(“”)
df.pivot(columns='name',values='value')