我有以下pandas.DataFrame
,形状为(1464, 2)
:
df = pd.DataFrame()
for name in list('ABCD'):
temp_df = pd.DataFrame(np.random.randint(0,100,size=(len(date_rng), 1)), columns=['value'], index=date_rng)
temp_df['name'] = name
df = df.append(temp_df)
索引列的每个数据重复4次:('ABCD')
列中的每个字符串name
重复一次。
数据帧的头部和尾部看起来像这样:
头
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()
中的4个唯一值(即{{1} }。每列的值是A, B, C, D
列中的相应整数。
最终的DataFrame应该看起来像这样:
df.value
与循环和重新创建数据框相反,我确信必须有一个不错的重新索引功能或类似的东西才能有效地执行任务。
答案 0 :(得分:1)
您可以使用此:
df.pivot(columns='name',values='value')
答案 1 :(得分:0)
您可以使用数据透视表
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-04', '50', 'D'), ('2018-01-05', '75', 'D')], columns=('id', 'value', 'name'))
df["id"] = pd.to_datetime(df.id)
df.set_index("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