微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个给定3列的方形数据框/矩阵 – Python

我正在努力弄清楚如何开发一个给定格式的方阵

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的强制转换功能,可以更快地完成这项工作?

解决方法:

你可以使用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’的列作为索引,列=’Y’告诉它使用标记为’Y’的列作为列索引.

有关枢轴和其他重塑方法的更多信息,请参见the docs.

或者,您可以使用pd.crosstab

print(pd.crosstab(index=df.iloc[:,0], columns=df.iloc[:,1], 
                  values=df.iloc[:,2], aggfunc='sum'))

与df.pivot不同,df.pivot期望每个(a1,a2)对是唯一的,pd.crosstab
(使用agfunc =’sum’)将通过对相关联的求和来聚合重复对
值.虽然您发布的示例中没有重复对,但请指定
当值时,需要如何聚合重复项
使用参数.

此外,虽然df.pivot传递了列标签,但传递了pd.crosstab
数组 – 喜欢(例如df的整列). df.iloc [:,i]是第i列
df.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐