首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建给定3列的正方形数据框架/矩阵- Python

问如何创建给定3列的正方形数据框架/矩阵- Python
EN

Stack Overflow用户
提问于 2017-12-07 05:21:29
回答 1查看 10.2K关注 0票数 11

我正在努力找出如何在给定如下格式的情况下开发一个方阵

代码语言:javascript
复制
a a 0
a b 3
a c 4
a d 12
b a 3 
b b 0
b c 2
...

类似这样的东西:

代码语言:javascript
复制
  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函数,可以更快地做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 05:24:19

您可以使用df.pivot

代码语言:javascript
复制
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'))

收益率

代码语言:javascript
复制
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

代码语言:javascript
复制
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列。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47683642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档