python - 连接数据框后对特定列进行排序
问题描述
我将 3 个数据帧连接成一个数据帧。现在我想对一些特定的列进行排序,所以我使用了这段代码:
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]}
解决方案
如果在 pandas 中按多列排序sequentially
,则表示首先按列表中的第一列,她Tab1_1
的,然后按下一个值,但前提是前列中的值重复,这里Tab1_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
如果需要单独排序,则必须先拆分列,排序然后分配回,但必须通过以下方式默认索引值reset_index(drop=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
推荐阅读
- laravel - 如何更正下图中的错误?
- java - 尝试获取与设定时区相比的本地时区
- xslt - 如何在不丢失兄弟数据的情况下基于子组复制 XML
- java - 如何为 Overide 方法编写 Junit 测试
- android - 用 Kotlin 协程实现 Observale.amb?
- google-apps-script - 如何从另一个工作表的另一行中删除具有与单元格相关内容的行?
- javascript - 如何使用 puppeteer 从 json 文件中获取数据到 js
- python - 来自数据集库的 load_dataset() 中的权限错误
- bash - 通过 Aria2c 下载 10k 链接的设置
- python - python - 用芹菜取消已经执行的任务