将pandas列与其他列的索引范围进行比较

时间:2019-11-16 07:00:32

标签: python pandas dataframe

我有一个这样的数据框,

df
col1    col2    col3
 1        A       A
 2        A       A
 3        B       A
 4        A       B
 5        A       A
 6        C       A
 7        A       A
 8        A       C
 9        A       A
 10       A       A
 11       C       C
 12       A       A
 13       A       A
 14       A       A
 15       C       A
 16       A       A
 17       A       A

我想创建一个函数,如果在col1和col2的同一行中找到B或C col1的B或C在col2的上方或下方有n行,则会创建另一个列a并标记为存在。

例如,如果函数是,并且如果我放f(df,2,'B','C'),则将返回

df

df
col1    col2    col3      col4
 1        A       A        NA
 2        A       A        NA
 3        B       A       present
 4        A       B        NA
 5        A       A        NA
 6        C       A       present
 7        A       A        NA
 8        A       C        NA
 9        A       A        NA
 10       A       A        NA
 11       C       C        present
 12       A       A        NA
 13       A       A        NA
 14       A       A        NA
 15       C       A        NA
 16       A       A        NA
 17       A       A        NA

我可以使用for循环来做到这一点,但是执行时间将非常长,我正在寻找一些熊猫捷径/ pythonic方式来实现它。

1 个答案:

答案 0 :(得分:0)

想法是比较两列与Series.isin的成员资格,然后检查上下N个值是否至少有一个True值-首先使用Index.where的索引值创建唯一组,然后转换为{由Index.to_series的{1}}并转发,并用Series传递给组GroupBy.transform的缺失值:

any