#python #pandas #dataframe
Вопрос:
list=[['10, 0.01, 0.0428, 120; 30, 0.1, 2, 33; 50, 0.023, 0.31, 0.65'],
['10, 0.7, 0.5428, 2.31'],
['50, 0.3, 0.35, 0.1'],
['-10, 0.2, 0.048, 124; -30, 0.11, 24, 3; -50, 0.02, 0.1, 0.60; 0, 0, 0, 0; 10, 0.1, 2, 33;
20, 0.023, 0.31, 0.66']]
df=pd.DataFrame(list)
У меня есть фрейм данных df, из которого я пытаюсь получить 3-е значение после каждого знака с запятой, если имя столбца совпадает с 1-м значением после знака с запятой. Ожидаемый результат выглядит следующим образом. Есть какие-нибудь подсказки о том, как решить эту проблему простым способом?
Комментарии:
1. Во 2-й и 3-й строках нет точки с запятой.
2. В этом случае просто нужно принять 3-е значение
3. Как вы получили этот список? Да, вы можете проанализировать поплавки, но вы, вероятно, захотите исправить исходный код
4. Я не думаю, что понимаю вопрос ?
5. @juanpa.arrivillaga фактические данные представляют собой фрейм данных из 1000 строк, сохраненных локально в моей системе, я скопировал несколько строк в списке, чтобы люди могли скопировать и попробовать в своей системе
Ответ №1:
Используйте вложенные циклы:
d = {}
for r, i in enumerate(l):
for j in i[0].split(';'):
k = j.split(',')
c, v = int(k[0]), float(k[2])
d[(r, c)] = v
df = pd.Series(d).unstack(fill_value=0)
Выход:
>>> df
-50 -30 -10 0 10 20 30 50
0 0.0 0.0 0.000 0.0 0.0428 0.00 2.0 0.31
1 0.0 0.0 0.000 0.0 0.5428 0.00 0.0 0.00
2 0.0 0.0 0.000 0.0 0.0000 0.00 0.0 0.35
3 0.1 24.0 0.048 0.0 2.0000 0.31 0.0 0.00
Комментарии:
1. ОП хочет получить третий пункт, а именно
k[2]
!2. @ddejohn Ты действительно уделяешь больше внимания, чем мне 🙂 Спасибо.
3. @РахулКумар. Я обновил свой ответ. Не могли бы вы проверить это, пожалуйста?
4. Ты всегда отвечаешь на волосок быстрее меня, лол, это меньшее, что я могу сделать, чтобы отомстить тебе за то, что ты опередил меня.
5. @ddejohn. Я больше не буду этого делать, обещаю 🙂