我有一个名为“ df”的数据框,在该数据框中有一个我们可以称为“ col”的列。
基于“ col”中的值,我需要在数据帧中仅保留(过滤)col [i]与col [i + 2]值不同且col [i +相同的值1]。确实,该列中具有相同值的序列是倒数第二个。
如果我有
Index a b col
0 34 56 1
1 45 23 1
2 11 17 1
3 45 67 2
4 12 12 2
5 1 3 3
6 98 12 3
我需要:
1 45 23 1
3 45 67 2
5 1 3 3
我使用以下代码:
def penultimate(df, col):
d = pd.DataFrame()
for i in range(1, len(df.index)-2):
if((df[col].iloc[i] != df[col].iloc[i + 2]) and (df[col].iloc[i] == df[col].iloc[i + 1])):
d = d.append(df.loc[i])
return d
它可以工作,但是对于大数据帧来说太慢了。有一种方法可以更快地做到这一点?
谢谢
答案 0 :(得分:1)
只需两次使用.shift
并进行向量化比较==
df[(df.col == df.col.shift(-1)) & (df.col != df.col.shift(-2))]
Index a b col
1 1 45 23 1
3 3 45 67 2
5 5 1 3 3