Задать вопрос
@san_m_m

Что сделать с DataFrame?

Добрый день!
Есть следующий примерный DataFrame.

1	2	3
L	M	O
M	O	
L	M	O
O		
M	O


Нужно сделать следующий вариант:

1	2	3
L	M	O
    	M	O
L	M	O
     		O
    	M	O


У меня есть идея перебирать все топороно:
spisok_L = []
for i in df['1']:
   if i == 'L':
      i
   else:
      i = ''


Потом поискать L во втором и третьем столбце и объединить их.
Когда 3 варианта, то это можно проделать, но для большего явно существуют иные более эффективные варианты, с помощью которых можно решить поставленную задачу с "минимальными потерями".

Вообщем благодарю за помощь!
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
@kamenyuga
Ну, вот такой, например, вариант
import pandas as pd

data = {
    '1': ['L', 'M', 'L', 'O', 'M'],
    '2': ['M', 'O', 'M', None, 'O'],
    '3': ['O', None, 'O', None, None]}
df = pd.DataFrame.from_dict(data)
print('original:\n', df)

column_letter_map = {'1': 'L', '2': 'M', '3': 'O'} # соответствие между названием столбца и буквой
new_data = list()

# перебираем все содержимое словаря
for column, letter in column_letter_map.items():
    new_data.append(
        (df == letter).any(axis=1)  # ищем буквы
        .replace({True: letter, False: None}) # если нашли, то меняем на саму эту букву
    )
    new_data[-1].name = column

new_df = pd.concat(new_data, axis=1)
print('\nmodified:\n', new_df)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zexer
А по какой логике первый датафрейм должен превратиться во второй? Опишите ее, чтобы вам можно было помочь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽