Python 在数据帧中筛选后删除行

Python 在数据帧中筛选后删除行,python,pandas,Python,Pandas,我有一个包含100000行的数据帧(ratings\u base)。我从中筛选了一行,并使用了下面的代码段 ((ratings\u base.loc[ratings\u base['user\u id']==1])。对值进行排序(按class='rating',升序=0)).iloc[0] 它返回一个系列对象 user_id 1 movie_id 170 rating 5 Name: 19996, dtype: int64 如何从原始数据帧对象中删除此行(系列对

我有一个包含100000行的数据帧(
ratings\u base
)。我从中筛选了一行,并使用了下面的代码段

((ratings\u base.loc[ratings\u base['user\u id']==1])。对值进行排序(按class='rating',升序=0)).iloc[0]

它返回一个
系列
对象

user_id       1
movie_id    170
rating        5
Name: 19996, dtype: int64

如何从原始数据帧对象中删除此行(系列对象)?我可以使用dataframe的drop函数,但我需要为它创建行索引。如果我可以获得所选行的行索引(我可以看到它显示为Series对象的Name属性),我可以删除它

df.loc[0]
选择第一行。
df.loc[1:][/code>选择第一行之后的所有内容

所以你可以用

ratings_base = ((ratings_base.loc[ratings_base['user_id'] == 1])
                .sort_values(by='rating', ascending=0))
ratings_base = ratings_base.iloc[1:]

或者,您可以使用
df.drop

row = ((ratings_base.loc[ratings_base['user_id'] == 1])
       .sort_values(by='rating', ascending=0)).iloc[0]
label = row.name
ratings_base = ratings_base.drop(label)
如果您希望删除不是第一行的行,这可能更灵活


请注意,
ratings\u base.drop
将删除索引为
label
的所有行。因此,如果索引不是唯一的,则可能会删除多行。

首选替代方案,而且它对我也有效。我有一个附带的问题。我必须使用“inplace=True”属性才能将其删除。我检查了len(评级基础)以确认它是否被丢弃。如果没有“inplace=True”属性,我看到的长度是100000,而有了这个道具,长度是99999。原因是什么?当调用
df.drop(…,inplace=True)
时,
drop
修改
df
并返回
None
。调用
df.drop(…)
时,
df
不会被修改,并且
drop
返回一个新的数据帧。因此,要更改
df
的值,需要使用赋值:
df=df.drop(…)
。我更喜欢后者(避免
inplace=True
),因为名称
inplace
具有误导性——它不是真正的就地操作,因为它不会保存临时内存。有关避免
就地
的其他原因,请参见。