У меня есть df
,
cluster_id memo
1 m
1 n
2 m
2 m
2 n
3 m
3 m
3 m
3 n
4 m
4 n
4 n
4 n
Я хочу groupby
cluster_id
и применяю следующую функцию,
def valid_row_dup(df):
num_real_invs = df[df['memo'] == 'm'].shape[0]
num_reversals_invs = df[df['memo'] == 'n'].shape[0]
if num_real_invs == df.shape[0]:
return True
elif num_reversals_invs == df.shape[0]:
return False
elif abs(num_real_invs - num_reversals_invs) > 0:
# even diff
if abs(num_real_invs - num_reversals_invs) % 2 == 0:
return True
else:
if abs(num_real_invs - num_reversals_invs) == 1:
return False
# odd diff
else:
return True
elif num_real_invs - num_reversals_invs == 0:
return False
, которая передает каждый groupby
объекткак df в func
;присвоить логические результаты обратно df
,
cluster_id memo valid
1 m False
1 n False
2 m False
2 m False
2 n False
3 m True
3 m True
3 m True
3 n True
4 m True
4 n True
4 n True
4 n True