在Panda方法链接中使用基于新加入的列的.loc



我有一个pandas数据帧,大致如下:

df = pd.DataFrame([{'Port': 8080, 'Speed': '1940 ms', 'Type': 'HTTP'},
{'Port': 3128, 'Speed': '1660 ms', 'Type': 'HTTP'},
{'Port': 3128, 'Speed': '900 ms', 'Type': 'HTTP'},
{'Port': 8080, 'Speed': '1600 ms', 'Type': 'HTTP'},
{'Port': 8080, 'Speed': '1340 ms', 'Type': 'HTTP'}])

我正在添加一个新列,然后使用该列来过滤数据帧,然后稍后进行一些其他修改。我想知道是否可以将所有这些函数调用链接到一个语句中:

new_df = (
df
.assign(sp_int = df. Speed.apply(lambda x: int(x.replace(' ms', ''))))
.loc[]
...
)

我知道过滤步骤可以推到任务前面,但这看起来很糟糕:

new_df = (
df
.loc[ df.Speed.apply(lambda x: int(x.replace(' ms', '')) < 1000) ]
.assign(sp_int = df. Speed.apply(lambda x: int(x.replace(' ms', ''))))
...
)

如果有更整洁的东西,那就太棒了。

感谢您的真知灼见!

您也可以使用query:

df.assign(sp_int = df.Speed.str.replace(' ms', '').astype(int)).query('sp_int < 1000')

是的,你可以做:

new_df = (
df
.assign(sp_int = df.Speed.str.replace(' ms', '').astype(int))
.loc[lambda x: x['sp_int']<1600]
)

输出:

Port    Speed  Type  sp_int
2  3128   900 ms  HTTP     900
4  8080  1340 ms  HTTP    1340

最新更新