开发者社区> 问答> 正文

你怎么把两列对变成方阵?

我有一个两列的dataframe,其中每一行代表一对。

import pandas as pd
x = pd.DataFrame([['dog', 'cat'], ['fish', 'parrot'], ['dog', 'llama'], ['pig', 'sloth']])

我的目标是将它转换成一个方阵,其中索引和列标头都用原始dataframe的惟一值填充,如下所示:

使用这个有用的答案,我可以做一个基于这些值的矩阵: df6 = x。pivot_table(index=0, columns=1, values=1, aggfunc='size', fill_value=0) 这不是我想要的,因为它不是正方形的(某些值,如'dog ',在索引中出现,但在列中省略)。 我改变了上面的手动输入项目的列和行: df7 = df6。重建索引(指数=[“猫”,“鱼”,“猪”、“骆驼”、“鹦鹉”,“懒惰”),列=[“猫”,“鱼”,“猪”、“骆驼”、“鹦鹉”,“懒惰”],fill_value = 0) 再说一次,这不是我想要的,因为构造它很费时间。所以我尝试添加一行来得到唯一的值列表:

listOfItems = pd.unique(df.values.ravel('K')

这不起作用,因为它给出的是0和1,而不是字符串值。所以我尝试用下面的方法来获得标题和列的唯一值:

listOfColumns = df6.columns
listOfIndex = df6.index
joinedlist = listOfColumns + listOfIndex

但我得到一个错误消息:操作数不能与形状(4,)(3,)一起广播 谁有好的方法来做方阵? 问题来源StackOverflow 地址:/questions/59380534/how-do-you-make-a-square-matrix-from-two-columns-of-pairs

展开
收起
kun坤 2019-12-28 14:14:37 361 0
1 条回答
写回答
取消 提交回答
  • 我在熊猫方面没有什么经验,所以我相信有人会带来一些漂亮的熊猫命令来转换数据,如你所愿。

    import pandas as pd
    pairs = [['dog', 'cat'], ['fish', 'parrot'], ['dog', 'llama'], ['pig', 'sloth']]
    x = pd.DataFrame(pairs)
    
    names = sorted(set([name for name in [*x[0], *x[1]]]))
    data = [[0]*len(names) for _ in range(len(names))]
    y = pd.DataFrame(data=data, columns=names, index=names)
    for pair in pairs:
        y[pair[1]][pair[0]] = 1
    
    print(y)
    

    输出

            cat  dog  fish  llama  parrot  pig  sloth
    cat       0    0     0      0       0    0      0
    dog       1    0     0      1       0    0      0
    fish      0    0     0      0       1    0      0
    llama     0    0     0      0       0    0      0
    parrot    0    0     0      0       0    0      0
    pig       0    0     0      0       0    0      1
    sloth     0    0     0      0       0    0      0
    
    2019-12-28 14:14:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载