如何按Pandas DataFrame的A列排序并保留整行,或筛选指定值行?
Pandas 排序与筛选解决方案
数据初始化(可直接测试)
import pandas as pd data = { 'Column A': ['D', 'E', 'E', 'D', 'E'], 'Column B': [40, 50, 70, 60, 90], 'Column C': ['hex', 'def', 'foo', 'bar', 'key'] } df = pd.DataFrame(data, index=[1,2,3,4,5])
1. 按Column A排序并保留关联行
直接用sort_values()函数,指定排序列即可,默认保留原索引和所有关联数据:
# 按Column A升序排序(D在前,E在后) sorted_df = df.sort_values(by='Column A')
如果需要在同组内(比如都是E的行)按其他规则排序,比如按Column B降序,可以扩展参数:
# 先按Column A升序,同组内按Column B降序 sorted_df = df.sort_values(by=['Column A', 'Column B'], ascending=[True, False])
2. 筛选仅包含D或E的行
不用手动找索引,直接用布尔索引就能快速筛选:
# 筛选Column A为D或E的行(通用写法,适用于数据中有其他值的情况) filtered_df = df[df['Column A'].isin(['D', 'E'])] # 仅筛选E的行 filtered_E_df = df[df['Column A'] == 'E']
关于多索引的疑问
完全不需要用多索引来实现这些需求,上面的基础方法已经足够高效处理13000行的数据集。另外你之前尝试的df.loc也可以结合布尔条件使用,比如:
# 用loc筛选D的行,不用知道具体索引 d_rows = df.loc[df['Column A'] == 'D']
内容的提问来源于stack exchange,提问作者etruhart314
相关产品推荐
相关产品推荐

