Pandas中如何将列选择、筛选与排序合并为单行代码?
问题描述
这是我的首次提问!这类操作在SQL中十分基础,理应很简单。我希望编写一个Pandas脚本完成以下操作:
- 从表中选择特定列
- 对列添加Where条件
- 对表格排序
我已给出示例DataFrame、对应的SQL查询,以及分步实现的Pandas代码,但觉得步骤过于繁琐,想请教是否有更简洁的写法?
示例DataFrame
| Customer | IssueCode | Count | Random |
|---|---|---|---|
| 1 | X | 5 | xxx |
| 2 | Y | 5 | xxx |
| 3 | Z | 10 | xxx |
对应SQL查询
Select CustomerId, IssueCode, Count From DataFram where Count= 5 order by CustomerId
我的分步Pandas代码
# 选择列 select_columns = df.loc[:,["CustomerId","IssueCode","Count"]] # 添加Where条件 where_clause = select_columns.where(select_columns.Count == 5) # 排序 sort_clause = where_clause.sort_values(by=['CustomerId'], ascending=False)
简洁写法方案
Pandas支持链式调用,可以把三步操作合并为一行代码,简洁且可读性强:
result = df.loc[df['Count'] == 5, ['CustomerId', 'IssueCode', 'Count']].sort_values(by='CustomerId', ascending=False)
代码说明
df.loc[df['Count'] == 5, ['CustomerId', 'IssueCode', 'Count']]:通过loc同时完成行筛选和列选择,第一个参数对应SQL的where条件,第二个参数对应要选取的列.sort_values(by='CustomerId', ascending=False):直接在筛选后的结果上调用排序方法,完成最终排序操作
另外需要注意:你原来用where方法会保留原DataFrame的所有行索引(不符合条件的行会显示为NaN),而用loc筛选和SQL的where行为完全一致,只会返回符合条件的行。
内容的提问来源于stack exchange,提问作者DatabaseGuy88
相关产品推荐
相关产品推荐

