У меня есть dataframe, в котором есть пустой столбец и столбец, значение в котором имеет тип список. Суть в том, что мне нужно заменить значение в столбце со списком на максимальное значение, которое в этом самом списке находится, а в пустой столбец записать индекс, который был у этого максимального значения в списке. И так для каждой строки. Документация pandas говорит, что это можно как-то сделать с помощью loc, но как, додуматься я уже не могу. При попытке пройтись по нему циклом выдаёт такое сообщение, а столбцы не меняет.
<ipython-input-125-b0f73295a4c7>:28: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
genres.iloc[i]['clusters'] = max(genres.iloc[i]['clusters'])
Сам фрейм:
genres clusters \
0 [Indie] [0.072281362, 0.0367577778, 0.0035245587, 0.00...
1 [Role-playing (RPG)] [0.0207314411, 0.008785802, 0.007276394, 0.005...
2 [Puzzle] [0.0309290634, 0.0633695299, 0.004186461, 0.00...
3 [Simulator] [0.0095561385, 0.0136525575, 0.0268809393, 0.7...
4 [Racing] [0.0348487218, 0.0180101217, 0.0080957065, 0.0...
.. ... ...
226 [Card & Board Game] [0.0726162447, 0.0187043791, 0.0086693631, 0.0...
227 [Platform] [0.0276185281, 0.0556897291, 0.0043596096, 0.0...
228 [Indie] [0.0388500644, 0.0284262101, 0.015074557, 0.02...
229 [Sport] [0.0083113202, 0.005286851, 0.0243050079, 0.00...
230 [Simulator] [0.0262762039, 0.0137836755, 0.0129542615, 0.0...
cluster_index
0
1
2
3
4
.. ...
226
227
228
229
230
Как реализовано:
# Добавляю пустой столбец
genres['cluster_index'] = ''
for i in genres.index:
genres.iloc[i]['cluster_index'] = max(enumerate(genres.iloc[i]['clusters']),key=lambda x: x[1])[0]
genres.iloc[i]['clusters'] = max(genres.iloc[i]['clusters'])