我有一个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