python - 如何对 Pandas 数据框的单行进行排序

标签 python pandas

我有以下数据框:

Client  Date        Value_1  Value_2  Value_3   Apple     Pear    Kiwi    Banana
ABC     2016-02-16  94       373      183       1739      38      19      73

ClientDataValue_1Value_2标题 是静态的.但是,这些列中的值可以更改。

ApplePearKiwiBanana 列标题是动态的。这些列中的值可以更改。

我希望能够对数据框进行排序,以便“颜色”列(在“值”列的右侧)从高到低排序,如下所示:

Client  Date        Value_1  Value_2  Value_3   Apple     Banana   Pear     Kiwi
ABC     2016-02-16  94       373      183       1739      73       38       19

我尝试了以下代码:

new_df = df.columns[5:].sort_values(ascending=False)

但是,这只是对列标题本身进行排序,而不是这些列中的值。

有谁知道如何做到这一点?

谢谢!

最佳答案

您需要为列创建新顺序:

order = list(df.columns[:4]) + \
        list(zip(*sorted([(i, int(df[i])) for i in df.columns[4:]], key=lambda x: x[1], reverse=True))[0])

此处,列名称与列值一起zip,然后应用排序。 zip(*[]) 解压缩排序列表并保留列名。 然后将其应用于您的数据框:

print df[order]

>>> Date     Value_1  Value_2  Value_3  Color_2  Color_1  Color_3  Color_4
0  ABC  2016-02-16       94      373     1739      183       38       19

关于python - 如何对 Pandas 数据框的单行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40380912/

相关文章:

python Pandas : returning more then one field value when applying function to a data frame row

python - 在 Python 中解压包含 bool 值的结构

python - 如何告诉 MATLAB 我正在导入的数据是一系列向量,而不仅仅是一系列字母?

python - 当 Pandas 满足条件时,从下一行返回值

python - Pandas:多索引子集选择

python - 在 pandas 数据帧上的 groupby 过程中保留包含所有字符串的列

python - 如何为 Seaborn Facet Plot 添加标题

python - PyGame 和 Unicode - 一个永无休止的故事

python - kv 语言 id 与另一个类对象作为 ObjectProperty kivy 链接

python - Pandas - 日期范围内每一天的新行