你可以使用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。