У меня есть фрейм данных:
id to from flag
1 a x 1
1 a y 0
2 c z 1
2 c m 1
2 b v 0
2 b p 0
, и я хочу сгруппировать (['id', 'to']) и вернуть список элементов из которых имеют только флаг 1.Если ни один элемент не имеет флага 1, то результатом будет «Нет».Желаемый результат должен быть:
id to from
1 a ['x']
2 c ['z','m']
2 b None
Я могу сделать это с apply, т.е.
out_df = df.groupby(['id', 'to'])['from'].apply(
lambda x: match_to_list(x['from'], x['flag'])).reset_index()
, где:
def match_to_list(to, flag):
matches = list(to.iloc[flag.nonzero()[0]])
if len(matches) == 0:
return 'None'
else:
matches
, но это занимает слишком много времени, и ядумаю, что должен быть лучший способ, который я пропускаю.
Буду очень признателен за любую помощь / понимание!ТИА