熊猫根据条件比较下一行

时间:2019-12-23 05:43:05

标签: python pandas dataframe conditional-statements

我有一个DataFrame,如图所示:

dataframe

我想比较当前行和下一行,是否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'})

1 个答案:

答案 0 :(得分:0)

您可以将数据框中的两个列都加载到不同的列表中,并对其进行迭代以检查是否符合条件,并组合更新后的列表以生成新的数据框。

这是一种非常蛮力的方法,但是会给您足够的想法,以提出一种更节省空间的方法,直接在数据帧上进行迭代。自己提出最佳答案也可能使您振奋。

import pandas as pd

Time = df['Time']
MessageType = df['MessageType']
Symbol = df['Symbol']

for i in range(len(Time)-1):
    if(Time[i] == Time[i+1] && MessageType[i] == "D" && MessageType[i+1] == "A"):
        del Time[i] # deleting the row
        del MessageType[i] # deleting the row
        del Symbol[i] # deleting the row
        MessageType[i+1] = "AMEND" # rename the message type

# creating a new dataframe with updated lists
new_df = pd.DataFrame({'Time':Time, 'MessageType':MessageType, 'Symbol':Symbol})