Python 连接数据帧后对特定列进行排序
我将3个数据帧连接成一个数据帧。现在我想对一些特定的列进行排序,所以我使用了以下代码:Python 连接数据帧后对特定列进行排序,python,python-3.x,pandas,Python,Python 3.x,Pandas,我将3个数据帧连接成一个数据帧。现在我想对一些特定的列进行排序,所以我使用了以下代码: final_df.sort_values(['Tab1_1', 'Tab2_2'], ascending=False) 但是,输出显示col1中的值是有序的,而col5中的值不是有序的。有人能告诉我我错过了什么吗 以下是一个数据示例: concat_table = {'ID': ['Sun_1'], 'Tab1': ['Al', 'Alu', 'Alt'],
final_df.sort_values(['Tab1_1', 'Tab2_2'], ascending=False)
但是,输出显示col1
中的值是有序的,而col5
中的值不是有序的。有人能告诉我我错过了什么吗
以下是一个数据示例:
concat_table = {'ID': ['Sun_1'],
'Tab1': ['Al', 'Alu', 'Alt'],
'Tab1_1': [6, 3, 4],
'%_Tab_1': [90, 50, 40],
'Tab2': ['Type1', 'Type2', 'Type3'],
'Tab2_2': [4, 5, 2],
'%_Tab1_2': [60, 90, 40]}
以下是订购方式:
concat_table_ordered = {'ID': ['Sun_1'],
'Tab1': ['Al', 'Alt', 'Alu'],
'Tab1_1': [6, 4, 3],
'%_Tab_1': [90, 40, 50],
'Tab2': ['Type2', 'Type1', 'Type3'],
'Tab2_2': [5, 4, 2],
'%_Tab1_2': [90, 60, 40]}
是否将此输出分配给另一个df?否则使用
inplace=True
:
final_df.sort_values(['col1','col5'], ascending=False, inplace=True)
df1 = df.iloc[:, :4].sort_values(['Tab1_1'], ascending=False)
df2 = df.iloc[:, 4:].sort_values(['Tab2_2'], ascending=False)
final_df = pd.concat([df1.reset_index(drop=True),
df2.reset_index(drop=True)], axis=1)
print (final_df)
ID Tab1 Tab1_1 %_Tab_1 Tab2 Tab2_2 %_Tab1_2
0 Sun_1 Al 6 90 Type2 5 90
1 Sun_1 Alt 4 40 Type1 4 60
2 Sun_1 Alu 3 50 Type3 2 40
如果按多列排序,则按顺序对
进行排序,这意味着首先按列表中的第一列、她的Tab1\u 1
进行排序,然后按下一个值进行排序,但仅当前一列中的值重复时,此处为Tab1\u 1
:
concat_table={'ID':'Sun_1',
'Tab1': ['Al','Alu','Alt', 'aaa'],
'Tab1_1':[6,3,4,4],
'%_Tab_1':[90,50,40,100],
'Tab2':['Type1','Type2','Type3','Type4'],
'Tab2_2':[4,5,2,1],
'%_Tab1_2':[60,90,40,20]}
df = pd.DataFrame (concat_table)
print (df)
ID Tab1 Tab1_1 %_Tab_1 Tab2 Tab2_2 %_Tab1_2
0 Sun_1 Al 6 90 Type1 4 60
1 Sun_1 Alu 3 50 Type2 5 90 <-4 are duplicated
2 Sun_1 Alt 4 40 Type3 2 40 <-4 are duplicated
3 Sun_1 aaa 4 100 Type4 1 20
df1 = df.sort_values(['Tab1_1','Tab2_2'], ascending=False)
print (df1)
ID Tab1 Tab1_1 %_Tab_1 Tab2 Tab2_2 %_Tab1_2
0 Sun_1 Al 6 90 Type1 4 60
2 Sun_1 Alt 4 40 Type3 2 40 <-sorted 2,1
3 Sun_1 aaa 4 100 Type4 1 20 <-sorted 2,1
1 Sun_1 Alu 3 50 Type2 5 90
你能添加一些数据样本吗?Onne idea,你会像final\u df=final\u df.sort\u值(['col1','col5',ascending=False)]那样赋值吗?
?我试过了,它没有改变…所以这里是排序的列。我想对列Tab1\u 1和Tab2\u 2进行排序。首先,我尝试对表1进行排序,其中有列(Tab1、Tab1\u 1、%\u Tab\u 1),并对其余的列进行了相同的排序。但是,当我连接这两个数据帧时,顺序与之前的顺序相同。这样,结果不会改变您使用的表的顺序inplace=True
?如果是,那么列的数据类型是什么?它必须起作用。是的,我用了in place=True。我要排序的列是第一个int和第二个float。。。我应该把它改成int吗?@Sofia-inplace=True
这里没有帮助,添加了带解释的答案这回答了我的问题,非常感谢你的帮助!