我正在尝试对每一行的熊猫的列进行排序。考虑此数据帧df:
X C1 C2 C3 C4 Y Z
A 11 15 12 13 A1 A2
B 21 25 22 23 B1 B2
C 31 35 32 33 C1 C2
我试图在每一行上按C1-C4升序对列进行排序,以使最终数据帧看起来像这样:
X C1 C2 C3 C4 Y Z
A 11 12 13 15 A1 A2
B 21 22 23 25 B1 B2
C 31 32 33 35 C1 C2
我查过大熊猫sort_values()
,但对手册有困难。希望有人可以向我展示一些技巧。我正在尝试仅对几列进行排序,而不对每一行都进行排序。
答案 0 :(得分:3)
使用numpy.sort
对所有行进行排序:
cols = ['C1','C2','C3','C4']
df[cols] = np.sort(df[cols], axis=1)
print (df)
X C1 C2 C3 C4 Y Z
0 A 11 12 13 15 A1 A2
1 B 21 22 23 25 B1 B2
2 C 31 32 33 35 C1 C2
如果可能,按索引0
排序:
cols = ['C1','C2','C3','C4']
df[cols] = df[cols].sort_values(0, axis=1)
#thanks @pygo for another solution
df[cols].sort_values(0, axis=1, inplace=True)
print (df)
X C1 C2 C3 C4 Y Z
0 A 11 12 13 15 A1 A2
1 B 21 22 23 25 B1 B2
2 C 31 32 33 35 C1 C2
输入数据框更改后的解决方案之间的区别:
print (df)
X C1 C2 C3 C4 Y Z
0 A 11 15 12 13 A1 A2
1 B 2 1 5 4 B1 B2
2 C 31 35 32 33 C1 C2
cols = ['C1','C2','C3','C4']
df[cols] = np.sort(df[cols], axis=1)
print (df)
X C1 C2 C3 C4 Y Z
0 A 11 12 13 15 A1 A2
1 B 1 2 4 5 B1 B2
2 C 31 32 33 35 C1 C2
cols = ['C1','C2','C3','C4']
df[cols] = df[cols].sort_values(0, axis=1)
print (df)
X C1 C2 C3 C4 Y Z
0 A 11 12 13 15 A1 A2
1 B 2 5 4 1 B1 B2
2 C 31 32 33 35 C1 C2
答案 1 :(得分:2)
您可以使用pandas
函数sort_values()
,如下所示:
In [331]: df
Out[331]:
X C1 C2 C3 C4 Y Z
0 A 11 15 12 13 A1 A2
1 B 21 25 22 23 B1 B2
2 C 31 35 32 33 C1 C2
In [332]: df.sort_values(['C1','C2','C3','C4'])
Out[332]:
X C1 C2 C3 C4 Y Z
0 A 11 15 12 13 A1 A2
1 B 21 25 22 23 B1 B2
2 C 31 35 32 33 C1 C2