Пусть это будет фрейм данных:
Код: Выделить всё
df = pd.DataFrame({
'group': ['x','x','x','y','y','z'],
'b': [1, 2, 1, 3, 3, 4]
})
group
b
x
1
x
2
x
1
y
3
y
3
z
4
Я хотел создать столбец «c», который собирает в список все уникальные значения из столбца «b» для каждой группы в результате получается следующее:
group
b
c
x
1
1,2 (в виде списка)
x
2
1,2 (в виде списка)
x
1
1,2 (в виде список)
y
3
3 (как список из 1 элемента)
y
3
3 (как список из 1 элемента)
z
4
4 (как список из 1 элемента)
Для этого я подумал об использовании .groupby('group')['b'].transform(). Я решил сделать это, потому что так я могу применить выбранное значение ко всей группе. Например, этот код может создать следующий фрейм данных:
Код: Выделить всё
df['c'] = df.groupby(['group'])['b'].transform('first')
group
b
c
x
1
1
x
2
1
x
1
1
y
3
3
y
3
3
z
4
4
Вернувшись к моей проблеме, я пробую эту строку, и она выдает следующую ошибку:
Код: Выделить всё
df['c'] = df.groupby(['group'])['b'].transform(lambda x: np.unique(x.astype(str)))
ValueError: Length of values (2) does not match length of index (3)
Код: Выделить всё
df['c'] = df.groupby(['group'])['b'].transform(lambda x: ','.join(np.unique(x.astype(str))))
group
b
c
x
1
'1,2'
x
2
'1,2'
x
1
'1,2'
y
3
'3'
y
3
'3'
z
4
'4'
Я думаю, что смогу найти обходной путь, используя .agg() и .map(), возможно, но мне интересно узнать, что я делаю не так с SeriesGroupBy
Может кто-нибудь объяснить мне, почему это не работает с моим кодом? Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... h-mismatch
Мобильная версия