У меня есть образец фрагмента, который работает, как и ожидалось:
import pandas as pd
df = pd.DataFrame(data={'label': ['a', 'b', 'b', 'c'], 'wave': [1, 2, 3, 4], 'y': [0,0,0,0]})
df['new'] = df.groupby(['label'])[['wave']].transform(tuple)
Результат:
label wave y new
0 a 1 0 (1,)
1 b 2 0 (2, 3)
2 b 3 0 (2, 3)
3 c 4 0 (4,)
Это работает аналогично, если вместо tuple
в преобразовании я даю set, frozenset, dict
, но если я даю list
, я получаю совершенно неожиданный результат:
df['new'] = df.groupby(['label'])[['wave']].transform(list)
label wave y new
0 a 1 0 1
1 b 2 0 2
2 b 3 0 3
3 c 4 0 4
Существует обходной путь для получения ожидаемого результата:
df['new'] = df.groupby(['label'])[['wave']].transform(tuple)['wave'].apply(list)
label wave y new
0 a 1 0 [1]
1 b 2 0 [2, 3]
2 b 3 0 [2, 3]
3 c 4 0 [4]
Я думал об изменчивости/неизменности (list/tuple), но для set/frozenset это согласуется.
Вопрос в том, почему это работает таким образом?