Как создать столбец, содержащий имя столбца из строки max списка столбцов - PullRequest
0 голосов
/ 22 октября 2019

У меня есть df, который выглядит так:

   time                 A                B                 C 
    0                   0                19                19    
    1                   0                 4                 4     
    2                   0                 0                 0     
    3                   0                 0                 0     
    4                   0                 4                 4  

Я хочу создать новый столбец, который выдает имя столбца для наибольшего значения в строке между столбцами A, B и C. Если все значения0, это должно привести к NaN. Если есть связь, то она должна давать оба значения. Здесь есть полезный ответ, с которого я начинаю, но эта функция выдает имя первого столбца, когда все столбцы равны 0 и не обрабатывает связи.

имя столбца, которое содержит максимальное значение

Я хочу вот что:

   time                 A                B              C          MAX
    0                   0                18             19       C
    1                   0                 4              4    [B,C]
    2                   0                 0              0      NaN 
    3                   0                 0              0      NaN
    4                  10                 4              4        A

1 Ответ

2 голосов
/ 22 октября 2019

Вы можете использовать apply:

def ma(xs):
    lst = [name for name, x in zip(xs.index, xs) if x == max(xs) and x > 0]

    if len(lst) == 1:
        return lst[0]

    return lst or np.nan


df['max'] = df[['A', 'B', 'C']].apply(ma, axis=1)

print(df)

Выход

   time   A   B   C     max
0     0   0  18  19       C
1     1   0   4   4  [B, C]
2     2   0   0   0     NaN
3     3   0   0   0     NaN
4     4  10   4   4       A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...