Если строка в столбце в CSV-файле содержит 1, то эту же строку в другом столбце следует перезаписать с помощью python, в противном случае следует оставить пустым - PullRequest
0 голосов
/ 26 марта 2020

У меня есть файл .csv с 300 000 строк. Я создал новый столбец вручную, и я sh для извлечения информации из некоторых старых столбцов, но я не могу сделать это вручную из-за длины файла. Название более старых столбцов: «Присутствует», «В сети», «Отсутствует», а новый столбец - «Посещаемость». Более старые столбцы имеют значения 1 и 0, где наблюдение является истинным или ложным, т. Е. Если наблюдение пришло к событию, тогда столбец «Настоящее время» будет иметь значение 1, а если что-то еще, он будет иметь значение 0. То же самое с столбцы «онлайн» и «отсутствует».

Я хочу, чтобы новый столбец брал информацию из более старых, т. е. если какой-либо из более старых из них имеет значение 1, такая же строка в «Посещаемости» должна иметь значение «присутствует», «онлайн» или «отсутствует», в зависимости от того, что является истинным. Я пытался сделать это с помощью Pandas, но не нашел способ, который работает для файлов .csv.

for i in f['Present']:
    if i == 1:
       f['Attendance'].write("present")

Я не против, если решение работает для одного столбца и повторяется для остальных. Это не должно работать для всех сразу.

Вот как это должно выглядеть

enter image description here

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Более pandasoni c решение (чем al oop, список условий и lo c), фактически основанное на Numpy is:

df['Attendance'] = np.select([df.Present == 1, df.Online == 1, df.Absent == 1],
    choicelist = ['present', 'online', 'absent'], default = '')

Он должен работать значительно быстрее, чем другое решение.

Подробнее см. документацию np.select .

1 голос
/ 26 марта 2020
for i in range(len(df)):
    if int(df.loc[i, 'present']) == 1:
        df.loc[i, 'attend'] = 'present'
    elif int(df.loc[i, 'online']) == 1:
        df.loc[i, 'attend'] = 'online'
    else:
        df.loc[i, 'attend'] = 'absent'

Вы можете пройти каждую строку кадра данных и установить значение нового столбца на основе предыдущих 3 столбцов.

См. https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning -a-view-versus-a -копию

...