在数据处理中,有可能遇到需要将某一列的取值变成新的字段,比如有一个表格:
id | A | B |
---|---|---|
id1 | a | 3.2 |
id1 | b | 4.1 |
id2 | a | 2.2 |
id2 | b | 3 |
现在需要将表格变为如下:
id | A_a | A_b |
---|---|---|
id1 | 3.2 | 4.1 |
id2 | 2.2 | 3 |
可以看到A的取值a, b变成了新的字段A_a, A_b。
1. 当只有一个索引时,可以使用pivot方法实现上述操作:
>>> df = pd.DataFrame({"id": ["id1", "id1", "id2", "id2"], "A":["a", "b", "a", "b"], "B":[3.2, 4.1, 2.2, 3]})
>>> df
id A B
0 id1 a 3.2
1 id1 b 4.1
2 id2 a 2.2
3 id2 b 3.0
>>> df_new = df.pivot(index="id", columns="A", values="B").reset_index()
>>> df_new
A id a b
0 id1 3.2 4.1
1 id2 2.2 3.0
# 重命名字段
>>> df_new.columns = ["id", "A_a", "A_b"]
>>> df_new
id A_a A_b
0 id1 3.2 4.1
1 id2 2.2 3.0
2. 当有多个索引时,使用pandas.pivot_table实现(建议使用这个方法)
df = pd.pivot_table(df, values='B', index=['id'], columns=['A']).reset_index()