根据值对DataFrame的列进行排序

时间:2015-07-27 19:27:08

标签: python pandas

我有以下输入:

col1    col2    col3
1       4       0
0       12      2
2       12      4
3       2       1 

我想根据列中的值对DataFrame进行排序,例如主要为df[df==0].count()排序,其次为df.sum()排序将产生输出:

col2    col3    col1
4       0       1
12      2       0
12      4       2
2       1       3 

pd.DataFrame.sort()将colum对象作为参数,这里不适用,所以我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

首先,我认为你的零数从右到左增加而你的总和正在减少,所以我认为你需要澄清这一点。您只需(df == 0).sum()即可获得零行数。

要按单个聚合排序,您可以执行以下操作:

col_order = (df == 0).sum().sort(inplace=False).index
df[col_order]

这会按其值对一系列聚合进行排序,结果索引是您想要的顺序中的df列。 对两组值进行排序会更加笨拙/棘手,但你可以做类似

的事情
aggs = pd.DataFrame({'zero_count': (df == 0).sum(), 'sum': df.sum()})
col_order = aggs.sort(['zero_count', 'sum'], inplace=False).index
df[col_order]

请注意,sort方法采用ascending参数,该参数采用布尔值或与您要排序的列数相等的布尔值列表,例如:

df.sort(['a', 'b', ascending=[True, False])