我有一个这样的数据框,
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方式来实现它。
答案 0 :(得分:0)
想法是比较两列与Series.isin
的成员资格,然后检查上下N个值是否至少有一个True值-首先使用Index.where
的索引值创建唯一组,然后转换为{由Index.to_series
的{1}}并转发,并用Series
传递给组GroupBy.transform
的缺失值:
any