我正在努力找出如何在给定如下格式的情况下开发一个方阵
a a 0
a b 3
a c 4
a d 12
b a 3
b b 0
b c 2
...类似这样的东西:
a b c d e
a 0 3 4 12 ...
b 3 0 2 7 ...
c 4 3 0 .. .
d 12 ...
e . .. 在熊猫身上。我开发了一个方法,我认为这个方法可以工作,但需要永远运行,因为它必须从开头开始迭代每个值的每一列和每一行,每次都使用for循环。我觉得我肯定是在重新发明轮子。考虑到有多少列和行,这对于我的数据集来说也是不现实的。在python中有没有类似于R的cast函数,可以更快地做到这一点?
发布于 2017-12-07 05:24:19
您可以使用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和其他整形方法的更多信息,请参阅the docs。
或者,您可以使用pd.crosstab
print(pd.crosstab(index=df.iloc[:,0], columns=df.iloc[:,1],
values=df.iloc[:,2], aggfunc='sum'))与期望每个(a1, a2)对是唯一的df.pivot不同,pd.crosstab (使用agfunc='sum')将通过对关联的值求和来聚合重复的对。尽管在您发布的示例中没有重复对,但在使用values参数时,需要指定如何聚合重复对。
此外,传递给df.pivot的是列标签,传递给pd.crosstab的是类似数组的(比如df的整列)。df.iloc[:, i]是df的第i列。
https://stackoverflow.com/questions/47683642
复制相似问题