如何根据索引条件删除 Pandas 行 (True/False)

How to Drop Pandas Rows Based on Index Condition (True/False)

我需要简单地应用从一个数据帧“df1”的“NaN”条件构造的索引到另一个数据帧“df2”,以便索引中由“True”指示的所有行都从df1 和 df2 数据帧。

系列 rowwithnan 索引如下所示:

0   False
1   True
2   True
3   False

df1 看起来像这样:

   plant_name  power_kwh  hour  day  month  year
0  AREC        32963.4    23   31     12    2020
1  AREC        35328.2    22   31     12    2020
2  AREC        37523.6    21   31     12    2020
3  AREC        36446.0    20   31     12    2020

df2 看起来像这样:

   plant_name  power_obs_kwh  hour  day  month  year
0  AREC        31548.4        23   31     12    2020
1  AREC        34732.2        22   31     12    2020
2  AREC        39023.7        21   31     12    2020
3  AREC        34946.0        20   31     12    2020

基于索引“rowswithnan”的“真”条件,我需要删除或删除 df1 和 df2 的行,以便它们对于 df2 看起来像这样:

   plant_name  power_obs_kwh  hour  day  month  year
0  AREC        31548.4        23   31     12    2020
3  AREC        34946.0        20   31     12    2020

和df1一样,是这样的:

   plant_name  power_kwh  hour  day  month  year
0  AREC        32963.4    23   31     12    2020
3  AREC        36446.0    20   31     12    2020

我试过类似这样的错误:

df1.drop(rowswithnan,inplace=True,axis=1)

KeyError: '[False False False ... True True True] not found in axis'

谢谢!

布尔索引在这里更简单:

df1 = df1[~rowswithnan]
df2 = df2[~rowswithnan]

也可以使用您原来的 drop() method, but drop() 想要的标签,所以我们最终还是使用布尔索引来获取 index:

df1.drop(df1[rowswithnan].index, inplace=True)
df2.drop(df2[rowswithnan].index, inplace=True)

这就是您所需要的。您需要确保 df1df2rowswithnan 的行数相同。

df1[~rowswithnan]
df2[~rowswithnan]

更多关于Boolean indexing