找出前两行中是否存在值

时间:2019-07-09 19:32:04

标签: python pandas

我有一个df,我希望找到该df值,该值在每个选定列中的前2行中重复。我该怎么办?

在excel中,我可以通过= if(countif(A1:B2,C1),“ True”,“ False”)来做到这一点

c = {'N1': [1,1,2,3,4,4,5],'N2': [2,3,4,4,5,6,7],'N3':[3,7,5,5,6,7,8],}
df = pd.DataFrame(c, columns=['N1','N2','N3'])

预期结果:

c = {'N1': [1,1,2,3,4,4,5],'N2': [2,3,4,4,5,6,7],'N3':[3,7,5,5,6,7,8],
     "Result1":['NA','NA','True','True','True','True','True'],
     "Result2":['NA','NA','False','True','True','True','True'],
     "Result3":['NA','NA','False','True','False','False','False']}
df = pd.DataFrame(c, columns=['N1','N2','N3','Result1','Result2','Result3'])

上述预期结果。

1 个答案:

答案 0 :(得分:1)

创建另一个具有2个移位的DataFrame,然后检查是否在这6个值中的任何一个中找到每一列的值。

u = pd.concat([df.shift(x) for x in range(1, 3)], axis=1, ignore_index=True)

for i in range(df.shape[1]):
    df[f'Result{i+1}'] = u.eq(df.iloc[:, i], axis=0).any(1)

cols = [x for x in df.columns if 'Result' in x]
df.loc[s.isnull().any(1), cols] = 'NA'

   N1  N2  N3 Result1 Result2 Result3
0   1   2   3      NA      NA      NA
1   1   3   7      NA      NA      NA
2   2   4   5    True   False   False
3   3   4   5    True    True    True
4   4   5   6    True    True   False
5   4   6   7    True    True   False
6   5   7   8    True    True   False