你可以使用df.pivot
:
import pandas as pd
df = pd.DataFrame([['a', 'a', 0],
['a', 'b', 3],
['a', 'c', 4],
['a', 'd', 12],
['b', 'a', 3],
['b', 'b', 0],
['b', 'c', 2]], columns=['X','Y','Z'])
print(df.pivot(index='X', columns='Y', values='Z'))
产量
Y a b c d
X
a 0.0 3.0 4.0 12.0
b 3.0 0.0 2.0 NaN
在这里,index='X'
告诉df.pivot
它使用标记'X'
为索引的列,并columns='Y'
告诉它使用标记'Y'
为列索引的列。
有关更多信息和其他重塑方法,请参阅文档。pivot
或者,您可以使用pd.crosstab
:
print(pd.crosstab(index=df.iloc[:,0], columns=df.iloc[:,1],
values=df.iloc[:,2], aggfunc='sum'))
与df.pivot
期望每(a1, a2)
对都是唯一的不同,pd.crosstab
(with agfunc='sum'
) 将通过对相关值求和来聚合重复的对。values
尽管在您发布的示例中没有重复对,但是在使用参数时需要指定应该如何聚合重复项。
此外,虽然df.pivot
传递的是列标签,但pd.crosstab
传递的是类数组(例如 的整列df
)。df.iloc[:, i]
是 的i
第 列df
。