我有一个风格的二进制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列到最后一列的总和)请询问您是否需要更多详细信息或想要样本文件。
答案 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