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()
(即.eA,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')