Я новичок в Python, и мне действительно нужна помощь. У меня есть около 1200 субъектов и 40 пунктов посттравматического стресса, которые я хочу обработать.
Вот таблица с примерными данными:
Как 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 столбцов (хотя это и не обязательно).
После этого я надеялся сделать наоборот и составить список всех испытуемых, которые одобрили каждый пункт посттравматического стресса.
Любые советы по началу работы будут очень признательны.
Какова структура данных таблицы, вложенный список или он хранится в определенном формате файла?
Добро пожаловать в СО. Это не дискуссионный форум или учебник. Пожалуйста, пройдите тур и найдите время, чтобы прочитать Как спросить и другие ссылки, найденные на этой странице. Потратьте некоторое время на Учебник, практикуясь на примерах. Это даст вам представление об инструментах, которые предлагает Python, чтобы помочь вам решить вашу проблему.
@ Vedant36 сейчас он в таблице Excel, но у меня также есть в формате CSV
@GreenCloakGuy данные, показанные в нижней части вопроса, - это то, как у меня есть данные в их текущей форме. Есть ли способ сделать это более понятным? Я просто надеялся добавить столбец со всеми пунктами (ПТСР1, ПТСР2 и т. д.), на которые субъект ответил «ДА». Извините за путаницу
@anon Я обновил свой ответ, добавив столбец с элементами «ДА». Вы можете прокомментировать это ниже под ответом.
Вот один из способов, который поможет вам начать работу. Детали зависят от того, что именно вы хотите сделать и как вы хотите структурировать выходные данные.
Вы можете сохранить свою таблицу в файле 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()
Вы можете использовать панды dot
также после преобразования значений Yes,No
в 1,0
.
Можете ли вы предоставить пару примеров строк данных, которые у вас есть, в их текущей форме, чтобы мы могли помочь вам преобразовать их в нужную вам таблицу?