Python 使用for循环在范围之间筛选数据帧的列?
我有这样一个数据帧:Python 使用for循环在范围之间筛选数据帧的列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: +----------------------------------------------------------------------------------+ | Total_Production Utilization_rate Avg_Count | +--------------------------------------------------------------------
+----------------------------------------------------------------------------------+
| Total_Production Utilization_rate Avg_Count |
+----------------------------------------------------------------------------------+
| 0 6.503907 96.027778 26.194017 |
| 9 6.171308 95.638889 31.500943 |
| 18 6.144897 95.986111 27.494776 |
| 27 6.056882 95.916667 27.525495 |
| 36 6.107343 105.541667 21.500208 |
| 45 2.139576 96.166667 27.480307 |
| 54 6.161222 96.486111 27.498256 |
| 63 1.034555 56.388889 27.568885 |
| 72 5.021524 91.069444 30.931702 |
| 81 5.831919 96.277778 28.284872 |
| 90 2.689860 62.486111 18.691440 |
| 99 5.227672 95.555556 31.441761 |
| 108 1.465271 95.541667 30.064098 |
+----------------------------------------------------------------------------------+
该系列分为两个系列。
最高范围:
总产量7.744379
利用率104.534796
平均计数29.691733
最低范围:
总产量3.880623
利用率64.315015
平均计数22.652148
过滤列中数据的最佳方法是什么?
我可以通过迭代行来使用for循环吗 您可以使用来限制各个列的范围:
df[
(3.880623 < df['Total_Production']) & (df['Total_Production'] < 7.744379) &
(64.315015 < df['Utilization_rate']) & (df['Utilization_rate'] < 104.534796) &
(22.652148 < df['Avg_Count']) & (df['Avg_Count'] < 29.691733)
]
df[
(3.880623
您可以使用查询
In [233]: df.query('3.880623 < Total_Production < 7.744379 and 64.315015 < Utiliza
...: tion_rate < 104.534796 and 22.652148 < Avg_Count < 29.691733')
Out[233]:
Total_Production Utilization_rate Avg_Count
0 6.503907 96.027778 26.194017
18 6.144897 95.986111 27.494776
27 6.056882 95.916667 27.525495
54 6.161222 96.486111 27.498256
81 5.831919 96.277778 28.284872
[233]中的:df.query('3.880623<总产量<7.744379和64.315015<效用
结果:平均感染率<104.534796和22.652148<29.691733')
出[233]:
总生产利用率平均计数
0 6.503907 96.027778 26.194017
18 6.144897 95.986111 27.494776
27 6.056882 95.916667 27.525495
54 6.161222 96.486111 27.498256
81 5.831919 96.277778 28.284872
再好不过了。我想这是最有效的。但它似乎是3:)中最慢的。检查一下我答案中的时间安排query
和eval
方法在较大的对象上运行良好。我们可以使用all()
方法实现这一点吗?这可以通过使用for循环通过迭代行来实现吗?最高和最低的范围是在两个不同的系列中。没有得到你。你所说的两个差分级数是什么意思?是的,你可以通过这两行进行迭代。在dataframe上有多种可用的iter方法。如果使用Jupyter或IPython,请在df.iter
后按tab键查看各种可用方法。最高范围在一个系列中,最低范围在一个系列中。我就是这么说的。
def foo():
df[
(3.880623 < df['Total_Production']) & (df['Total_Production'] < 7.744379) &
(64.315015 < df['Utilization_rate']) & (df['Utilization_rate'] < 104.534796) &
(22.652148 < df['Avg_Count']) & (df['Avg_Count'] < 29.691733) ]
def foo1():
df[df.Total_Production.between(left=3.880623, right=7.744379) &
df.Utilization_rate.between(left=64.315015, right=104.534796) &
df.Avg_Count.between(left=22.652148, right=29.691733)]
def foo2():
df.query("3.880623 < Total_Production < 7.744379 and 64.315015 < Utilization_rate < 104.534796\
and 22.652148 < Avg_Count < 29.691733")
%timeit foo()
%timeit foo1()
%timeit foo2()
100 loops, best of 3: 2.95 ms per loop
100 loops, best of 3: 2.92 ms per loop
100 loops, best of 3: 3.67 ms per loop