首页 > 解决方案 > 在多个条件下比较熊猫数据框中的行时,“ValueError:索引数据必须是一维的”

问题描述

我正在尝试在多个条件下比较数据帧的行,并使用以下代码删除条件为真的行:

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列和B列中的值匹配,并且当前行 C 列中的值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

标签: pythonpandasnumpydataframevalueerror

解决方案


一个样本数据集会更容易。但是,根据您的叙述,让我们尝试; df[~((df['C'].isna())&(df['A'].eq(df['A'].shift(-1)))&(df['B'].eq(df['B'].shift(-1))))]


推荐阅读