我正在努力弄清楚如何开发一个给定格式的方阵
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’的列作为列索引.
或者,您可以使用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] 举报,一经查实,本站将立刻删除。