按行总和排序矩阵(最好是bash或python)

时间:2017-06-23 13:46:08

标签: python bash sorting matrix sum

我有一个风格的二进制tsv矩阵:

name product 141 142 143 144 145 146 147 
n1   p1      0   0    0   0   0   1   1 
n2   p2      1   1    1   1   1   1   0
n3   p3      1   0    1   1   0   1   1

如何按行和按降序对此矩阵进行排序? (从第2行开始,第3列到最后一列的总和)请询问您是否需要更多详细信息或想要样本文件。

2 个答案:

答案 0 :(得分:1)

这个awk单行可能会有所帮助:

awk '{for(x=3;x<=NF;x++)s+=$x;print s,$0;s=0}' file|sort -nr|sed 's/^\S* //'

输出:

name product 141 142 143 144 145 146 147
n2   p2      1   1    1   1   1   1   0
n3   p3      1   0    1   1   0   1   1
n1   p1      0   0    0   0   0   1   1

答案 1 :(得分:1)

你可以使用熊猫。

import pandas as pd

file_name = "..."
df = pd.read_csv(file_name)

df = (df.set_index(['name', 'product'])  # Use `name` and `product` as index.
        .assign(sum=df.sum(axis=1))  # Add temporary 'sum' column to sum rows.
        .sort_values(by='sum', ascending=False)  # Sort by row sum descending order.
        .iloc[:, :-1])  # Remove temporary `sum` column.

>>> df
              141  142  143  144  145  146  147
name product                                   
n1   p1         0    0    0    0    0    1    1
n2   p2         1    1    1    1    1    1    0
n3   p3         1    0    1    1    0    1    1