Python 熊猫会根据条件比较下一行

Python 熊猫会根据条件比较下一行,python,pandas,dataframe,conditional-statements,Python,Pandas,Dataframe,Conditional Statements,我有一个数据框,如图所示: 我想比较一下当前行和下一行,df['Time']是否相同,df['MessageType']是否是'D'后跟'A'。如果满足条件,请删除包含“D”的行,并将值“A”重命名为“AMEND” 类似于 if df['Time'] (current) == df['Time'] (next) & df['MessageType'] (current) == 'D' is followed by df['MessageType'] (next) == 'A': del

我有一个数据框,如图所示:

我想比较一下当前行和下一行,df['Time']是否相同,df['MessageType']是否是'D'后跟'A'。如果满足条件,请删除包含“D”的行,并将值“A”重命名为“AMEND”

类似于

if df['Time'] (current) == df['Time'] (next) & df['MessageType'] (current) == 'D' is followed by df['MessageType'] (next) == 'A':
del current row
df['MessageType'] (next_row).rename({'A': 'AMEND'})

您可以将数据框中的两列加载到不同的列表中,并对它们进行迭代,以检查是否遵循了条件&合并更新的列表以生成新的数据框

这是一种非常暴力的方法,但它会给你足够的想法,让你想出一种更节省空间的方法,直接在数据帧上迭代。自己想出最好的答案也会让你振作起来

将熊猫作为pd导入
时间=df[“时间”]
MessageType=df['MessageType']
Symbol=df['Symbol']
对于范围内的i(长度(时间)-1):
如果(时间[i]==时间[i+1]&&MessageType[i]==“D”&&MessageType[i+1]==“A”):
删除时间[i]#删除该行
del MessageType[i]#删除该行
删除符号[i]#删除该行
MessageType[i+1]=“AMEND”#重命名消息类型
#使用更新的列表创建新的数据框
new_df=pd.DataFrame({'Time':Time,'MessageType':MessageType,'Symbol':Symbol})

您可以在pandas中使用shift函数,使用
句点=-1
显示示例DFT谢谢。它确实解决了我的问题,尽管出现了警告——“试图在数据帧的切片副本上设置值请参阅文档中的注意事项:”设置WithCopyWarning只是确保用户知道他们在操作主数据帧的副本,而不是原始数据帧,因此更改可能不会反映在原始df上。试着读一下这个答案,