Сопоставьте значение и получите заголовок столбца в python - PullRequest
0 голосов
/ 19 ноября 2018

Пример

У меня есть 1000 на 6 данных, где A, B, C, D оценивались людьми по шкале 1-10.

В столбце SELECT у меня есть значение, которое во всех случаях совпадает со значением в любом из A / B / C / D.

Я хочу изменить значение в «SELECT» на имя столбца, которому оно соответствует. Например, для идентификатора 1 SELECT = 1 и D = 1, поэтому значение select должно измениться на D.

import pandas as pd
df = pd.read_excel("u.xlsx",sheet_name = "Sheet2",header = 0)

Но я теряюсь, как действовать.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Решение Gwenersl сравнивает все столбцы без ID и SELECT, отфильтрованных по difference с DataFrame.eq (==), сначала проверьте значение True поidxmax, а также, если не существует, совпадающим значением является заданное значение no match с numpy.where:

cols = df.columns.difference(['ID','SELECT'])
mask = df[cols].eq(df['SELECT'], axis=0)

df['SELECT'] = np.where(mask.any(axis=1), mask.idxmax(axis=1), 'no match')
print (df)
   ID  A  B  C  D SELECT
0   1  4  9  7  1      D
1   2  5  7  2  8      C
2   3  7  4  8  6      C

Detail :

print (mask)
       A      B      C      D
0  False  False  False   True
1  False  False   True  False
2  False  False   True  False
0 голосов
/ 19 ноября 2018

Предполагая, что значения в A, B, C, D уникальны в каждой строке относительно SELECT, я бы сделал это так:

>>> df
   ID  A  B  C  D  SELECT
0   1  4  9  7  1       1
1   2  5  7  2  8       2
2   3  7  4  8  6       8
>>>
>>> df_abcd = df.loc[:, 'A':'D']
>>> df['SELECT'] = df_abcd.apply(lambda row: row.isin(df['SELECT']).idxmax(), axis=1)
>>> df
   ID  A  B  C  D SELECT
0   1  4  9  7  1      D
1   2  5  7  2  8      C
2   3  7  4  8  6      C
0 голосов
/ 19 ноября 2018

Использование -

df['SELECT2'] = df.columns[pd.DataFrame([df['SELECT'] == df['A'], df['SELECT'] == df['B'], df['SELECT'] == df['C'], df['SELECT'] == df['D']]).transpose().idxmax(1)+1]

выход

    ID  A   B   C   D   SELECT  SELECT2
0   1   4   9   7   1   1   D
1   2   5   7   2   8   2   C
2   3   7   4   8   6   8   C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...