Подсчитайте, сколько раз значение столбца появляется в одной строке, используя выражения Polars.Python

Программы на Python
Ответить
Anonymous
 Подсчитайте, сколько раз значение столбца появляется в одной строке, используя выражения Polars.

Сообщение Anonymous »

Я пытаюсь добавить столбец с помощью map_rows в Polars.
Я хочу посчитать, сколько раз значение ref появляется в других столбцах для каждой строки.

Код: Выделить всё

import polars as pl

df = pl.from_repr('''
┌─────┬─────┬─────┐
│ ref ┆ v1  ┆ v2  │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ -1  ┆ -1  ┆ -1  │  # -1 appears 2 times (excluding ref)
│ 2   ┆ 5   ┆ 5   │  #  2 appears 0 times
│ 8   ┆ 0   ┆ 8   │  #  8 appears 1 time
└─────┴─────┴─────┘
''')
Эквивалент pandas выглядит следующим образом:

Код: Выделить всё

df_pd = df.to_pandas()
df_pd['count'] = df_pd.apply(lambda r: len([i for i in r if i == r[0]]) - 1, axis=1)
df_pd = df_pd.drop('ref', axis=1)
df_pd

Код: Выделить всё

   v1  v2  count
0  -1  -1      2
1   5   5      0
2   0   8      1
Ниже приведен пример кода, который у меня есть для поляров. Хотя он работает так, как хотелось бы, выглядит он некрасиво и, вероятно, его тоже можно улучшить.

Код: Выделить всё

x = df.map_rows(lambda r: len([i for i in r if i == r[0]]) - 1).rename({'map': 'count'})
df = df.hstack([x.to_series()]).drop('ref')

df

Код: Выделить всё

shape: (3, 3)
┌─────┬─────┬───────┐
│ v1  ┆ v2  ┆ count │
│ --- ┆ --- ┆ ---   │
│ i64 ┆ i64 ┆ i64   │
╞═════╪═════╪═══════╡
│ -1  ┆ -1  ┆ 2     │
│ 5   ┆ 5   ┆ 0     │
│ 0   ┆ 8   ┆ 1     │
└─────┴─────┴───────┘
Что меня беспокоит, так это часть переименования и hstack, которые я собрал вместе для работы.
Я был бы благодарен за любые улучшения в приведенном выше коде.


Подробнее здесь: https://stackoverflow.com/questions/765 ... rs-express
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»