我有以下数据框:
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)
但是,只有对列标题进行排序,而不是这些列中的值。
有谁知道如何做到这一点?
谢谢!
答案 0 :(得分:1)
您可以使用自定义功能:
cols = [col for col in df.columns if not col.startswith('Color')]
print (cols)
['Client', 'Date', 'Value_1', 'Value_2', 'Value_3']
def f(x):
return pd.Series(x.sort_values(ascending=False).values, index=x.sort_values().index)
df = df.set_index(cols).apply(f, axis=1).reset_index()
print (df)
Client Date Value_1 Value_2 Value_3 Color_3 Color_2 Color_4 \
0 ABC 2016-02-16 94 373 183 1739 73 38
Color_1
0 19
另一种解决方案:
#select to Series all values from position 5
x = df.ix[0, 5:]
print (x)
Color_1 1739
Color_2 38
Color_3 19
Color_4 73
Name: 0, dtype: object
#create DataFrame with sorting values and index of Series x
a = pd.DataFrame([x.sort_values(ascending=False).values], columns=x.sort_values().index)
print (a)
Color_3 Color_2 Color_4 Color_1
0 1739 73 38 19
#concat to original
df = pd.concat([df[df.columns[:5]], a], axis=1)
print (df)
Client Date Value_1 Value_2 Value_3 Color_3 Color_2 Color_4 \
0 ABC 2016-02-16 94 373 183 1739 73 38
Color_1
0 19
编辑byu改变了问题:
x = df.ix[:, 5:].sort_values(by=0, ascending=False, axis=1)
print (x)
Apple Banana Pear Kiwi
0 1739 73 38 19
df = pd.concat([df.ix[:, :5], x], axis=1)
print (df)
Client Date Value_1 Value_2 Value_3 Apple Banana Pear Kiwi
0 ABC 2016-02-16 94 373 183 1739 73 38 19
答案 1 :(得分:1)
您还可以使用numpy对它们进行排序。
Right click your project > Maven > Reimport
答案 2 :(得分:1)
您需要为列创建新订单:
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