В Python, как подсчитать количество элементов в нескольких столбцах, которые выше, чем элемент в одном столбце? - PullRequest
2 голосов
/ 03 августа 2020

Мне нравится подсчитывать элементы в столбцах с 1 по 3, которые больше, чем элементы в столбце 0. Например, у меня есть фрейм данных, как показано ниже.

    a   b   c     d
0  50  60  40  20.0
1  40  10  30  40.0
2  30  40  20  35.0
3  20   0  30  25.0
4  10   5  40   NaN

И я хочу подсчитать элементы в столбцах b , c, d больше, чем элемент в столбце a. Результат должен быть таким, как показано ниже.

    a   b   c     d  count
0  50  60  40  20.0      1
1  40  10  30  40.0      0
2  30  40  20  35.0      2
3  20   0  30  25.0      2
4  10   5  40   NaN      1

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Используйте DataFrame.gt вдоль axis=0, чтобы создать логическую маску, затем используйте DataFrame.sum вдоль axis=1 на этой маске, чтобы получить count:

df['count'] = df[['b', 'c', 'd']].gt(df['a'], axis=0).sum(1)

Результат:

    a   b   c     d  count
0  50  60  40  20.0      1
1  40  10  30  40.0      0
2  30  40  20  35.0      2
3  20   0  30  25.0      2
4  10   5  40   NaN      1
1 голос
/ 03 августа 2020

Для каждого из задействованных столбцов мы можем провести сравнение и преобразовать логические результаты в int (1 для True, 0 для False):

def greater_value(df, reference, column):
    return (df[column] > df[reference]).astype(int)

И затем сложить результаты:

df['count'] = greater_value(df, 'a', 'b') + greater_value(df, 'a', 'c') + greater_value(df, 'a', 'd')

Или обобщите по предоставленному набору имен столбцов:

def count_greater(df, reference, *columns):
    return sum(greater_value(df, reference, column) for column in columns)

df['count'] = count_greater(df, 'a', 'b', 'c', 'd')
...