python - 在多个条件下比较熊猫数据框中的行时,“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
解决方案
一个样本数据集会更容易。但是,根据您的叙述,让我们尝试; df[~((df['C'].isna())&(df['A'].eq(df['A'].shift(-1)))&(df['B'].eq(df['B'].shift(-1))))]
推荐阅读
- kubernetes - 无法使用 kubeconfig 文件中的上下文
- javascript - 反应后执行动作
- javascript - setTimeout - 有没有正确的方法来实现它?
- plsql - 寻找基于oracle apex layout design的plsql代码
- matlab - 如何在 Matlab 中使用黄油功能构建带通滤波器?
- stm32 - 按下按钮时从 STM32 ADC 获取读数
- vuejs2 - vue-owl-carousel 不适用于 v-for
- sql - 下面的 SQL 查询是否有效?
- python - 字典映射返回楠
- applescript - 在标记后取 X 符号并保存到 AppleScript 中的变量