我试图在多种条件下比较数据帧的行,并用以下代码删除条件为真的行:
df_new = df_old.drop(np.where(((df_old['A'] == df_old['A'].shift(-1)) & (df_old['B'] == df_old['B'].shift(-1)) & (df_old['C'].isna()))))
如果当前行A和B列中的值与前一行A列中的值为nan,则我想删除当前行。但是代码不起作用,我得到以下错误:
"ValueError:索引数据必须是一维的";
数据帧如下所示:
Index A B timestamp number
0 a600 JH123aas 2020-10-20 13:27:38 35686
1 a600 JH123aas 2020-10-20 13:27:40 nan
2 a350 AV129nas 2020-10-20 13:28:50 nan
3 a158 KU954bas 2020-10-20 13:37:12 nan
4 a158 KU954bas 2020-10-20 13:37:18 15489
任何关于如何更正我的代码或如何防止错误的建议都将不胜感激。
编辑:我刚刚意识到,我不仅想将当前行与前一行进行比较,还想将其与下一行进行对比。所以数据帧最终应该是这样的:
Index A B timestamp number
0 a600 JH123aas 2020-10-20 13:27:38 35686
2 a350 AV129nas 2020-10-20 13:28:50 nan
4 a158 KU954bas 2020-10-20 13:37:18 15489
一个示例数据集会让它变得更容易。然而,根据你的叙述,让我们试试;df[~((df['C'].isna())&(df['A'].eq(df['A'].shift(-1)))&(df['B'].eq(df['B'].shift(-1))))]