Назначить новый столбец на основе значений в отдельном столбце - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь найти более эффективный способ присвоения значений Column на основе значений в отдельном Column.Для df ниже я хочу назначить 0 для будних дней и 1 для выходных.

Это моя попытка:

import pandas as pd
import numpy as np

d = ({             
   'Day' : ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],                                                                                                                                                 
    })

df = pd.DataFrame(data=d)

df['Group'] = np.where(df['Day'] == 'Monday', 0, 1)
df['Group'] = np.where(df['Day'] == 'Tuesday', 0, 1)
df['Group'] = np.where(df['Day'] == 'Wednesday', 0, 1)
df['Group'] = np.where(df['Day'] == 'Thursday', 0, 1)
df['Group'] = np.where(df['Day'] == 'Friday', 0, 1)
df['Group'] = np.where(df['Day'] == 'Saturday', 1, 0)
df['Group'] = np.where(df['Day'] == 'Sunday', 1, 0)

Output:

         Day  Group
0     Monday      0
1    Tuesday      0
2  Wednesday      0
3   Thursday      0
4     Friday      0
5   Saturday      0
6     Sunday      1

Intended Output:

         Day  Group
0     Monday      0
1    Tuesday      0
2  Wednesday      0
3   Thursday      0
4     Friday      0
5   Saturday      1
6     Sunday      1

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Каждый раз, когда вы делаете df['Group'] = np.where(...), вы устанавливаете значения столбца Group с самого начала.Таким образом, в вашей серии утверждений единственное, что действительно имеет значение, является последним:

df['Group'] = np.where(df['Day'] == 'Sunday', 1, 0)

Чтобы обойти это, вы можете установить все значения столбца Group одновременно:

import pandas as pd
import numpy as np

d = ({             
   'Day' : ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],                                                                                                                                                 
    })

df = pd.DataFrame(data=d)
df['Group'] = np.where(df['Day'].isin(['Saturday', 'Sunday']), 1, 0)

Output:

         Day  Group
0     Monday      0
1    Tuesday      0
2  Wednesday      0
3   Thursday      0
4     Friday      0
5   Saturday      1
6     Sunday      1
0 голосов
/ 04 марта 2019

Вы также можете проверить этот способ

d = pd.DataFrame({             
   'Day' : ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],                                                                                                                                                 
    })


group = []

  for i, row in d.iterrows():
    if row['Day'] == 'Saturday' or row['Day'] == 'Sunday':
        group.append(0)
    else:
        group.append(1)
d['group'] =group
0 голосов
/ 04 марта 2019

Вот один из способов использования df.apply

import pandas as pd

DAYVALUE = {'Monday':0, 'Tuesday':0, 'Wednesday':0, 'Thursday':0, 'Friday':0, 'Saturday':1, 'Sunday':1}

>>>df
         Day
0     Monday
1    Tuesday
2  Wednesday
3   Thursday
4     Friday
5   Saturday
6     Sunday

df['Group'] = df.loc[:,'Day'].apply(lambda x: DAYVALUE[x])

>>>df
         Day  Group
0     Monday      0
1    Tuesday      0
2  Wednesday      0
3   Thursday      0
4     Friday      0
5   Saturday      1
6     Sunday      1
...