python - 如何通过两个限制之间的列值索引数据框
问题描述
我希望能够通过按数据框一列中的所需值索引数据框来制作数据框的较小子集。
代码
import pandas as pd
import numpy as np
data = [['Alex',15,4],['Bob',5,1],['Clarke',13,2],['dan',6,2],['eve',19,1],['fin',12,1],['ginny',11,2],['hal',14,1],['ian',13,3],['jen',9,1] ]
df = pd.DataFrame(data,columns=['Name','Age','Pets'])
print (df)
lo = 10
hi = 14
lo_range = df[df['Age']>=lo]
print('lo_range:', lo_range)
mid_range = df[hi>= df['Age']>=lo]
print('mid_range:', mid_range)
我发现了如何做到这一点:
mid_range = df[( df['Age']>=lo) & (df['Age']>=hi)]
解决方案
另一种方法是将 apply 与 lambda 一起使用:
mid_range = df[df['Age'].apply(lambda x: x in range(lo,hi+1))]
在测量将 apply 与 lambda 和&
运算符一起使用的执行时间时,我注意到 apply lambda 有点快!
start_time = time.time()
mid_range = df[df['Age'].apply(lambda x: x in range(lo,hi+1))]
end_time = time.time()
'mid_range:', Name Age Pets
2 Clarke 13 2
5 fin 12 1
6 ginny 11 2
7 hal 14 1
8 ian 13 3
"execution time(sec): 0.0006139278411865234"
start_time = time.time()
mid_range = df[( df['Age']>=lo) & (df['Age']<=hi)]
end_time = time.time()
'mid_range:', Name Age Pets
2 Clarke 13 2
5 fin 12 1
6 ginny 11 2
7 hal 14 1
8 ian 13 3
"execution time(sec): 0.0015518665313720703"
因此,如果您的数据框中只有几个条目可能并不重要,但如果您的表中恰好有几百万个条目,它真的会有所作为!
推荐阅读
- haskell - 有没有办法断言编译器将函数识别为尾递归?
- css - 垫表 - 分页器溢出,按钮样式也不同
- javascript - 迭代数据脚本中的键
- reactjs - 远程图像处理本地反应实例在 Heroku 上失败
- jupyter - 尝试打开 jupyter 笔记本时出现 nbformat 错误
- python - 分类数据:通过添加新维度转换为二进制编码
- html - 如何调试 CSS 特异性问题?
- python - 通过 numpy.random.seed 设置的随机种子是否跨子模块维护?
- c# - ISessionClient.AcceptMessageSessionAsync 中的 operationTimeout 实际上是做什么的?
- react-native - React Native 桥接器:从本机向 JS 连续发送数据?