Python遍历df并参考下一行

如何解决Python遍历df并参考下一行

我有一个包含两列的数据框-Col1和Col2。我想遍历它,只返回遵循模式的值:

如果A后跟B,则返回AB,否则不返回任何内容。我基本上希望摆脱所有紧随其后的B。请注意,在我的实际示例中,B始终以A开头。

df = pd.DataFrame({"Col1": ['A','B','A','B'],"Col2": [11,22,33,44,55]})

  Col1  Col2
0    A    11
1    B    22
2    A    33
3    A    44
4    B    55

我想到了以下代码

for index,row in df.iterrows():
    if row['Col1'] == 'A':
        if row.shift(1)['Col1'] == 'B':
            print(row)
            print(row.shift(1))
        else:
            continue
    else:
        continue

我现在只是执行“打印功能”,以查看是否可以打印正确的条目,但是如果有人帮助我用这些行创建新DF的方法,我将感到非常高兴。

上面的代码什么也不返回,也没有错误

编辑:所需输出示例

  Col1  Col2
0    A    11
1    B    22
3    A    44
4    B    55

解决方法

让我们创建一个布尔掩码,其中eq + shift表示A后跟B的条件,然后使用此掩码过滤数据帧:

m1 = df['Col1'].eq('B') & df['Col1'].shift().eq('A')
m2 = df['Col1'].eq('A') & df['Col1'].shift(-1).eq('B')
df = df[m1 | m2]

  Col1  Col2
0    A    11
1    B    22
3    A    44
4    B    55
,

您可以添加所需输出示例吗?

此外,在熊猫数据帧中创建“ for”循环通常被认为是不好的做法(也占用大量时间!)。我相信您的问题的答案就在于这篇文章:

How to iterate over rows in a DataFrame in Pandas

,

我的朋友帮助了我,找到了解决方案,因此我分享那些偶然遇到的问题。

df["Col3"] = df["Col1"].shift(-1)
df["Col4"] = df["Col1"].shift(1)

df_new = df[((df["Col1"] == "A") & (df["Col3"] == "B")) | ((df["Col1"] == "B") & (df["Col4"] == "A"))]
df_new = df_new[["Col1","Col2"]]

df_new

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?