我有以下输入:
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对象作为参数,这里不适用,所以我该如何实现呢?
答案 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])