Динамическое применение лямбда-функции к столбцам - PullRequest
1 голос
/ 10 июля 2020

У меня есть лист Google , где некоторые ответы находятся не в нужном месте.

В самом деле, я бы хотел, чтобы для каждой строки, учитывая ответ в последнем столбце, если ответа еще нет в столбце Answeri, мы перемещаем этот ответ влево в первом столбце, которого нет.

То есть получаем что-то вроде:

    Questions   Answer0     Answer1     Answer2     Answer3     Answer4    Answer6
3   What is your preference for a in-hotel grocery...   'Not preferred'     2   3   4   'Preferred'    None
58  3 - If yes, on a scale of 0 -10, to what exten...   'Low affected'  2   3   4    5    'High affected' 

Итак Я написал это:

import pandas as pd

def put_at_right_place(row):
    if row.Answer257 not in [None, np.nan]:
        answer = row.Answer257
        if answer not in row.Answer0:
            for i in range(0,257):
                # on choppe la premiere colonne qui n'est pas None
                if row[f'Answer{i}']== None:
                    index_to_replace = 'Answer' + str(i-1)
                    row[index_to_replace] = row.Answer257

df = pd.read_csv('la_hoja_del_vinclulo.csv')
df.apply(lambda x: put_at_right_place(x), axis=1) 

Как и в таблицах Google, я буду очень рад попробовать и Javascript Editor.

1 Ответ

0 голосов
/ 10 июля 2020

Поскольку я считаю, что конечной целью является анализ данных ...;)

Я бы растопил ваш df:

unique_cols = ["QID_x","URL_x","Questions", 
               "Answers_x","Section","QType_x",
               "Theme","Topics"]
results = df.melt(id_vars=unique_cols, 
                  var_name="Answer", 
                  value_name="Value")
results = results[pd.notnull(results["Value"])]

Теперь вы можете легко проанализировать каждый вопрос:

results[results.QID_x == 1]

После того, как вы расплавились, вы можете развернуться и сделать что-то вроде этого:

results.sort_values(by='Answer').pivot(index="QID_x", columns='Answer', values='Value')

Затем снова присоединитесь к (pd.merge) с исходным фреймом (без ответов).

...