我有一个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'})
答案 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})