在Pandas数据帧中过滤后删除行

时间:2016-10-22 12:43:57

标签: python pandas

我有数据帧(ratings_base),其中包含100000行。我正在过滤它的一行,我使用了以下代码段。

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

返回Series个对象。

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

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

1 个答案:

答案 0 :(得分:1)

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

所以你可以使用

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_base.drop会删除索引为label的所有行。因此,如果索引不是唯一的,则可以删除多行。