Перебор определенных столбцов для создания списков на основе логических операторов в python

Я новичок в Python, и мне действительно нужна помощь. У меня есть около 1200 субъектов и 40 пунктов посттравматического стресса, которые я хочу обработать.

Вот таблица с примерными данными:

Идентификатор субъекта ПТСР1 посттравматическое стрессовое расстройство 2 ПТСР3 1223 ДА НЕТ ДА 1224 НЕТ НЕТ ДА 1225 ДА НЕТ НЕТ 1226 ДА НЕТ НЕТ

Как CSV:

SubjectID,PTSD1,PTSD2,PTSD3
1223,YES,NO,YES
1224,NO,NO,YES
1225,YES,NO,NO
1226,YES,NO,NO

Я хотел бы написать цикл for (или любую другую функцию), который позволит мне пройтись по каждой теме и создать список всех элементов посттравматического стресса, которые они одобрили. Я просто надеялся добавить столбец со всеми пунктами (ПТСР1, ПТСР2 и т. д.), на которые субъект ответил «ДА».

Я надеялся использовать заголовок столбца как переменную, чтобы я мог сделать это сразу для всех 40 столбцов (хотя это и не обязательно).

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

Любые советы по началу работы будут очень признательны.

Можете ли вы предоставить пару примеров строк данных, которые у вас есть, в их текущей форме, чтобы мы могли помочь вам преобразовать их в нужную вам таблицу?

Green Cloak Guy 26.12.2020 18:25

Какова структура данных таблицы, вложенный список или он хранится в определенном формате файла?

Vedant36 26.12.2020 18:27

Добро пожаловать в СО. Это не дискуссионный форум или учебник. Пожалуйста, пройдите тур и найдите время, чтобы прочитать Как спросить и другие ссылки, найденные на этой странице. Потратьте некоторое время на Учебник, практикуясь на примерах. Это даст вам представление об инструментах, которые предлагает Python, чтобы помочь вам решить вашу проблему.

wwii 26.12.2020 18:29

@ Vedant36 сейчас он в таблице Excel, но у меня также есть в формате CSV

Riley 26.12.2020 20:05

@GreenCloakGuy данные, показанные в нижней части вопроса, - это то, как у меня есть данные в их текущей форме. Есть ли способ сделать это более понятным? Я просто надеялся добавить столбец со всеми пунктами (ПТСР1, ПТСР2 и т. д.), на которые субъект ответил «ДА». Извините за путаницу

Riley 26.12.2020 20:11

@anon Я обновил свой ответ, добавив столбец с элементами «ДА». Вы можете прокомментировать это ниже под ответом.

lecodesportif 26.12.2020 22:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один из способов, который поможет вам начать работу. Детали зависят от того, что именно вы хотите сделать и как вы хотите структурировать выходные данные.

Вы можете сохранить свою таблицу в файле CSV (data.csv) со следующим содержимым:

SubjectID,PTSD1,PTSD2,PTSD3
1223,YES,NO,YES
1224,NO,NO,YES
1225,YES,NO,NO
1226,YES,NO,NO

Затем обработайте его с помощью Pandas:

import pandas as pd

df = pd.read_csv("data.csv")

# go through each subject and create a list of all of the PTSD items they endorsed
def subject_responses(subject_id):
    return df.loc[df['SubjectID'] == subject_id]
    
print(subject_responses(1225))
#    SubjectID PTSD1 PTSD2 PTSD3
# 2       1225   YES    NO    NO

# create a list of all the subjects who endorsed each PTSD item
def response_subjects(ptsd_item):
    return df.loc[df[ptsd_item] == "YES"]
    
print(response_subjects("PTSD1"))    
# 0    1223
# 2    1225
# 3    1226

# add a column with all of the items (PTSD1, PTSD2, etc) that a subject responded 'YES' to
def get_items(row):
    items = []
    for i in range(1,4):
        item = 'PTSD'+str(i)
        if row[item] == "YES":       
            items.append(item)
    return ','.join(items)
    
df['PTSD_ITEMS'] = df.apply(get_items, axis=1)
print(df)

#    SubjectID PTSD1 PTSD2 PTSD3   PTSD_ITEMS
# 0       1223   YES    NO   YES  PTSD1,PTSD3
# 1       1224    NO    NO   YES        PTSD3
# 2       1225   YES    NO    NO        PTSD1
# 3       1226   YES    NO    NO        PTSD1
df1 = df.replace({'NO': 0, 'YES': 1}); df1.set_index('SubjectID', inplace=True); df['new'] = df1.dot(df1.columns+ ',').str.rstrip(',').str.split(',').tolist()
Pygirl 31.12.2020 08:22

Вы можете использовать панды dot также после преобразования значений Yes,No в 1,0.

Pygirl 31.12.2020 08:23

Другие вопросы по теме