Разделить список на половину длины и добавить новый столбец с зависимыми значениями - PullRequest
0 голосов
/ 01 июня 2018

У меня есть файл данных csv, который я разделил по значению столбца на 5 наборов данных для каждого человека, используя:

for i in range(1,6):
    PersonData = df[df['Person'] == i].values
    P[i] = PersonData

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

Итак, я отсортировал данные следующим образом:

dataP = {}

for i in range(1,6):
    sortData = P[i][P[i][:,9].argsort()]
    P[i] = sortData
    P[i] = pd.DataFrame(P[i])
dataP[1]

Используя это, я получаю фрейм данных для каждого из моих наборов данных 1-6отсортировано по соответствующему столбцу (9), в зависимости от того, какое число я положил в dataP [i].

Затем я вычисляю половину длины:

for i in range(1,6):
    middle = len(dataP[i])/2
    print(middle)

Вот где я застрял!

Мне нужно создать новый столбец в каждом dataPrame dataP [i], который разделяет длину на 2 и дает значение 0, если оно в первой половине, и 1, если оно во второй.

Это то, что я пробовал, но я не понимаю, почему он не создает новый список значений 0 и 1, который я могу позже добавить в dataP [i]:

for n in range(1, (len(dataP[i]))):
    for n, line in enumerate(dataP[i]):
        if middle > n:
            confval = 0
        elif middle < n:
            confval = 1
for i in range(1,6): 
    Confval[i] = confval
Confval[1]

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

Любая помощь будет высоко ценится.Заранее спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Если я правильно читаю ваш вопрос, я полагаю, что вы пытаетесь сделать две вещи.

  1. Найдите медианное значение столбца
  2. Создайте новый столбец, который равен 0если значение меньше медианы или 1, если больше.

Давайте сначала займемся # 1:

median = df['originalcolumn'].median()

Это просто!Для таких вещей есть много замечательных функций панд.

Хорошо, так номер два:

df['newcolumn'] = df[df['originalcolumn'] > median].astype(int)

Мы создаем новую серию bool, falseесли значение в этом месте меньше медианы, в противном случае - true.Затем мы можем привести это к int, которое дает нам 0 и 1.

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