Используйте groupby
и apply
, после чего следует последний to_dict
вызов.
df.groupby('index').value.apply(list).to_dict()
# {0: ['val1', 'val2', 'val3', 'val4', 'val5'],
# 1: ['val6', 'val7', 'val8', 'val9', 'val10'],
# 2: ['val11', 'val12', 'val13', 'val14']}
Другой вариант - перебирать строки и добавлять значения в словарь, используя setdefault
.
d = {}
for k, v in zip(df['index'], df.value):
d.setdefault(k, []).append(v)
print(d)
# {0: ['val1', 'val2', 'val3', 'val4', 'val5'],
# 1: ['val6', 'val7', 'val8', 'val9', 'val10'],
# 2: ['val11', 'val12', 'val13', 'val14']}
Мои тесты показывают, что это действительно лучше, чем groupby
для кадров среднего размера.Это также сохранит порядок значений, в то время как groupby
выполняет сортировку (является ли она стабильной или нет, это деталь реализации).