【问题标题】:Rearrange a dataframe / matrix into pattern将数据框/矩阵重新排列为模式
【发布时间】:2021-07-17 02:53:26
【问题描述】:

我有一个由 0 和 1 组成的矩阵,我想以使同一列中值为 1 的行一起出现的方式排列矩阵。

例如,如果我使用 A = np.random.randint(2,size=(100, 1000),dtype=np.int8) 创建一个矩阵 它将生成一个 0 和 1 的随机矩阵,我将进一步减少矩阵中 1 的数量。现在我想重新排列矩阵,这样如果我用黄色显示 1,用紫色显示 0,这就是输出的样子。

想想一个矩阵,其中一行是 person_id,列是一个热编码,其中每一列都代表这个人拥有的东西。所以我想以一种拥有相似物品的人一起出现的方式来安排这个。因此,请安排行和列,以便将其可视化,就像附加的图像一样。

一种解决方案基本上是根据行总和对行顺序进行排序,然后根据列总和对列顺序进行排序,但我正在寻找可以保证这样的正确结果的东西。 旁注,矩阵的大小将高达 200k*300k

【问题讨论】:

    标签: python pandas numpy matrix


    【解决方案1】:

    也许我误解了这个问题,但足以对其进行排序吗?问题是,如果你的矩阵是:

       1 1 1
    A= 0 0 0
       0 1 0
       1 0 1
    

    根据您优先考虑第一列还是第二列,您有两个有效:

        1 1 1                   1 1 1
    A1= 1 0 1               A2= 0 1 0
        0 1 0                   1 0 1
        0 0 0                   0 0 0
    

    我会假设你想优先考虑第一个,然后如果等于第二个,那么第三个......等等。鉴于此,您可以按所有列对数据框进行排序:

    df.sort_values(by=df.columns.tolist(),ascending=False,inplace = True)

    如果我误解了问题(可能),请告诉我 :)

    【讨论】:

    • 是的,像这样我可以重新排列行和列的顺序以将相似的东西放在一起
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2014-09-22
    • 2016-10-01
    • 2015-06-10
    • 2012-03-25
    相关资源
    最近更新 更多