заполнение нескольких столбцов данных на основе условия в другом столбце - PullRequest
0 голосов
/ 12 октября 2018

У меня есть фрейм данных со столбцом для 'id' и отдельным столбцом для каждого дня недели.

Я пытаюсь заполнить столбцы дня, используя условие для столбца 'id'.

Так, например,

if df['id'] == 1:
    df['monday'] = 1

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

multiple_days = ['m', 't', 'w', 'T', 'f']

if df['id'] == 3:

for day in multiple_days:
    df[day] = 1

Я, очевидно, новичок в Python, и я могу найти неэффективное решение для перебора, но я знаю, что должен быть более простой способ сделать это.Кто-нибудь может помочь новичку?

1 Ответ

0 голосов
/ 12 октября 2018

Использование DataFrame.mask:

df = pd.DataFrame({
        'id':[1,2,1,2,1,1],
         'm':[4,5,4,5,5,4],
         't':[7,8,9,4,2,3],
         'w':[1,3,5,7,1,0],
         'T':[5,3,6,9,2,4],
         'f':[1,3,5,7,1,0],
})

multiple_days = ['m', 't', 'w', 'T', 'f']

m = df['id'] == 1
df[multiple_days] = df[multiple_days].mask(m, 1, axis=1)
print (df)
   id  m  t  w  T  f
0   1  1  1  1  1  1
1   2  5  8  3  3  3
2   1  1  1  1  1  1
3   2  5  4  7  9  7
4   1  1  1  1  1  1
5   1  1  1  1  1  1

Еще одна идея из комментариев из @Pankaj Joshi:

df.loc[m, multiple_days] = 1

Или решение для numyс numpy.where и трансляцией:

arr = df[multiple_days].values
df[multiple_days] = np.where(m[:, None], 1, arr)
print (df)
   id  m  t  w  T  f
0   1  1  1  1  1  1
1   2  5  8  3  3  3
2   1  1  1  1  1  1
3   2  5  4  7  9  7
4   1  1  1  1  1  1
5   1  1  1  1  1  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...