如何解决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 举报,一经查实,本站将立刻删除。