@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 варианта, то это можно проделать, но для большего явно существуют иные более эффективные варианты, с помощью которых можно решить поставленную задачу с "минимальными потерями".

Вообщем благодарю за помощь!
  • Вопрос задан
  • 72 просмотра
Решения вопроса 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
А по какой логике первый датафрейм должен превратиться во второй? Опишите ее, чтобы вам можно было помочь.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы