Как я могу получить первый не другой на нескольких столбцов метки - PullRequest
0 голосов
/ 08 января 2019

Вот мой набор данных, назовите их df

Id  Name   Math    Physics   Biology   Chemistry
1   Andy   A       B         A         B
2   Bert   Other   C         Other     A
3   Candy  Other   Other     A         B
4   Dony   B       A         C         B

Ожидаемое значение не включает 'Other', первое ожидаемое значение называется 'Grade':

Id  Name   Math    Physics   Biology   Chemistry  Grade
1   Andy   A       B         A         B          A   
2   Bert   Other   C         Other     A          C
3   Candy  Other   Other     A         B          A
4   Dony   B       A         C         B          B

Ответы [ 4 ]

0 голосов
/ 08 января 2019

mask + bfill

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

df['Grade'] = df.iloc[:, 2:].mask(df.iloc[:, 2:].eq('Other')).bfill(1).iloc[:, 0]
0 голосов
/ 08 января 2019

Использование idxmax + lookup :

df['Grade'] = df.lookup(df.index, (df.iloc[:, 2:] != 'Other').idxmax(axis=1))
print(df)

выход

   Id   Name   Math Physics Biology Chemistry Grade
0   1   Andy      A       B       A         B     A
1   2   Bert  Other       C   Other         A     C
2   3  Candy  Other   Other       A         B     A
3   4   Dony      B       A       C         B     B

С idxmax вы получите для каждой строки индекс первого столбца, отличный от Other. Затем используйте lookup, чтобы получить значения в каждой ячейке.

0 голосов
/ 08 января 2019

заменить 'Other' на np.nan

>>df.replace('Other',np.nan,inplace=True)

Тогда:

>>df['Grade']=df.iloc[:,2:].bfill(axis=1).iloc[:,0]

Восстановите Other вместо np.nan

>>df.replace(np.nan,'Other',inplace=True)
0 голосов
/ 08 января 2019

Вот решение с использованием justify:

df['Grade'] = justify(df.iloc[:,2:].values, invalid_val='Other')[:,0]

    Id   Name   Math Physics Biology Chemistry Grade
0   1   Andy      A       B       A         B     A
1   2   Bert  Other       C   Other         A     C
2   3  Candy  Other   Other       A         B     A
3   4   Dony      B       A       C         B     B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...