这是我的DataFrame:
import pandas as pd
df = pd.DataFrame(
{
'a': ['x', 'x', 'x', 'x', 'x', 'y', 'y', 'y', 'y', 'y', 'y', 'y'],
'b': [1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2, 2],
'c': [9, 8, 11, 13, 14, 3, 104, 106, 11, 100, 70, 7]
}
)
预期输出:创建列out
:
a b c out
0 x 1 9 NaN
1 x 1 8 NaN
2 x 1 11 NaN
3 x 2 13 found
4 x 2 14 NaN
5 y 1 3 NaN
6 y 1 104 found
7 y 1 106 NaN
8 y 2 11 NaN
9 y 2 100 NaN
10 y 2 70 NaN
11 y 2 7 NaN
面具是:
mask = (df.c > 10)
过程:收件箱是通过第a
列:
a)对于每个组,找到满足mask
条件的第一行.
b)对于组x
,此条件仅适用于b == 2
.这就是 Select 第3
行的原因.
这是我的try .它已经接近了,但感觉不是这样:
def func(g):
mask = (g.c > 10)
g.loc[mask.cumsum().eq(1) & mask, 'out'] = 'found'
return g
df = df.groupby('a').apply(func)