У меня есть столбец (user_id) с тысячами user_id (также дублируется) и еще один столбец (строка) с несколькими разными строками. Я хотел бы проверить, имеет ли уникальный user_id определенную строку и сохранить идентификатор пользователя и 1 в новом кадре данных. Если user_id не имеет строки, то я хотел бы сохранить user_id и 0. В этом случае я хотел бы присвоить 1 строке «хорошо» и 0 любой другой строке.
Кажется, я не могу найти хороший способ сделать это без бесконечного цикла.
НАЧАЛЬНЫЙ ФРЕЙМ ДАННЫХ PANDAS
ЖЕЛАЕМЫЙ ФРЕЙМ ДАННЫХ PANDAS
Заранее спасибо!
Вы можете проверить, содержится ли строка, используя issubset:
res = df.groupby('user_id')['string'].apply(frozenset(['good']).issubset).reset_index()
print(res)
Выход
user_id string
0 1 True
1 2 True
2 3 False
Если нужно как целое число:
res['string'] = res['string'].astype(int)
print(res)
Выход
user_id string
0 1 1
1 2 1
2 3 0
Как альтернатива:
res = df.groupby('user_id')['string'].apply(lambda x: x.eq('good').any()).reset_index()
res['string'] = res['string'].astype(int)
print(res)
Чтобы сохранить векторизацию, мы можем пропустить apply
:
df['string'].eq('good').groupby(df['user_id']).any().astype(int).reset_index(name='is string')
user_id is string
0 1 1
1 2 1
2 3 0
@ Taco22 Taco22 Рад, что смог помочь, но решение Эрфана лучше.