我有以下数据框:
Client Date Value_1 Value_2 Value_3 Apple Pear Kiwi Banana
ABC 2016-02-16 94 373 183 1739 38 19 73
Client
、Data
、Value_1
和 Value_2
列标题 是静态的.但是,这些列中的值可以更改。
Apple
、Pear
、Kiwi
和 Banana
列标题是动态的。这些列中的值可以更改。
我希望能够对数据框进行排序,以便“颜色”列(在“值”列的右侧)从高到低排序,如下所示:
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/