您可以使用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
(使用 agfunc='sum'
)将通过加总相关值来聚合重复的组合。
虽然在您发布的示例中没有重复的组合,但在使用 values
参数时需要指定如何聚合重复项。
而且,df.pivot
需要传递列标签,而 pd.crosstab
需要传递
类似数组的东西(例如整列数据框 df
)。df.iloc[:, i]
是 df
的第 i
列。