Более быстрый способ применить функцию к строкам?Python

Программы на Python
Ответить
Anonymous
 Более быстрый способ применить функцию к строкам?

Сообщение Anonymous »

Если мы хотим применить функцию к строкам, где в настоящее время нет встроенного метода, например Rank_horizontal, какой самый быстрый способ?
data = {0: [0, 1, 0, 1, 1, 0, 1, 0, 1, 1],
1: [0, 0, 0, 0, 0, 0, 1, 0, 1, 1],
2: [0, 0, 1, 0, 1, 0, 1, 0, 0, 1],
3: [0, 1, 0, 0, 1, 0, 0, 0, 1, 0],
4: [0, 1, 1, 0, 1, 0, 0, 0, 1, 1]}


Input df (pandas):

0 1 2 3 4
0 0 0 0 0 0
1 1 0 0 1 1
2 0 0 1 0 1
3 1 0 0 0 0
4 1 0 1 1 1
5 0 0 0 0 0
6 1 1 1 0 0
7 0 0 0 0 0
8 1 1 0 1 1
9 1 1 1 0 1


В pandas мы можем сделать это:
df.rank(axis=1)

В полярах это один из способов сделать это. Есть ли более быстрый способ?
(df2.select(
pl.concat_arr(
pl.all()).arr.eval(pl.element().rank())
)
.with_row_index()
.explode('0')
.with_columns(
pl.col('index').cum_count().sub(1).over('index').alias('cc')
).pivot(index = 'index',on = 'cc'))

Вывод:
0 1 2 3 4
0 3.0 3.0 3.0 3.0 3.0
1 4.0 1.5 1.5 4.0 4.0
2 2.0 2.0 4.5 2.0 4.5
3 5.0 2.5 2.5 2.5 2.5
4 3.5 1.0 3.5 3.5 3.5
5 3.0 3.0 3.0 3.0 3.0
6 4.0 4.0 4.0 1.5 1.5
7 3.0 3.0 3.0 3.0 3.0
8 3.5 3.5 1.0 3.5 3.5
9 3.5 3.5 3.5 1.0 3.5


Подробнее здесь: https://stackoverflow.com/questions/798 ... cross-rows
Ответить

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

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

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

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

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