识别满足条件的DataFrame索引对象

时间:2013-07-26 16:57:42

标签: python pandas

如果满足特定条件,如何从我的DataFrame中获取索引对象,比如给定列?

以下内容返回SeriesTrue/False个对象,其foo列符合my_dataframe列中的某些条件:

true_entries = my_dataframe['foo'].apply(my_lambda_function) == True

但我想得的是与这些条目对应的index对象。

我该怎么做?

作为应用程序的一个示例,我想在满足该条件的数据框中删除行。

更新

我尝试了来自@DSM的建议从我的数据帧中删除条目(行),但是以下命令:

indices_to_drop = my_df.index[my_df['foo'].apply(my_lambda_function) == True]
my_df.drop(indices_to_drop)

返回:

DeprecationWarning: height has been deprecated

1 个答案:

答案 0 :(得分:2)

如果您希望Index对应于真值,则可以使用布尔Series作为df.index上的切片:

>>> df
    A  B
0  10 -5
1  20 -2
2  30  1
3  40  4
4  50  7
>>> df["B"].apply(lambda x: x % 2 == 0)
0    False
1     True
2    False
3     True
4    False
Name: B, dtype: bool
>>> df.index[df["B"].apply(lambda x: x % 2 == 0)]
Int64Index([1, 3], dtype=int64)

但是,如果您只想删除满足该条件的行,则根本不需要构造显式索引。您可以简单地保留不符合的条件:

>>> df[~df["B"].apply(lambda x: x % 2 == 0)]
    A  B
0  10 -5
2  30  1
4  50  7