Столбец Polars из условного поиска значений словаряPython

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

Сообщение Anonymous »

Я хочу сопоставить ключ в одном кадре данных Polars с другим Polars DF на основе связей между столбцами. Это всего лишь образец, полные DF1 и DF2 намного больше (2,5 миллиона и 1,5 миллиона строк соответственно).

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

import polars as pl

DF1 = pl.DataFrame({
'chr' : ["GL000008.2", "GL000008.2", "GL000008.2", "GL000008.2","GL000008.2", "GL000008.2"],
'start': [14516,17380,17381,20177,22254,24357],
'end': [14534,17399,17399,20195,22274,24377]
})

DF2 = pl.DataFrame({
'key' : [1,2,3,4,5,6],
'chrom' : ["GL000008.2", "GL000008.2", "GL000008.2", "GL000008.2","GL000008.2", "GL000008.2"],
'start': [14516,15377,17376,20177,22254, 24357],
'end': [14534,15403,17399,20195,22274,24377]})
Я хочу:

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

pl.from_repr("""
┌────────────┬───────┬───────┬─────┐
│ chr        ┆ start ┆ end   ┆ key │
│ ---        ┆ ---   ┆ ---   ┆ --- │
│ str        ┆ i64   ┆ i64   ┆ i64 │
╞════════════╪═══════╪═══════╪═════╡
│ GL000008.2 ┆ 14516 ┆ 14534 ┆ 1   │
│ GL000008.2 ┆ 17380 ┆ 17399 ┆ 3   │
│ GL000008.2 ┆ 17381 ┆ 17399 ┆ 3   │
│ GL000008.2 ┆ 20177 ┆ 20195 ┆ 4   │
│ GL000008.2 ┆ 22254 ┆ 22274 ┆ 5   │
│ GL000008.2 ┆ 24357 ┆ 24377 ┆ 6   │
└────────────┴───────┴───────┴─────┘
""")
Я хотел бы назначить ключ от DF2 до DF1, когда chrom соответствует chr, а начало и конец в DF1 содержатся в начале и конце в DF2.
Сначала я попытался перебрать строки DF1, ищем соответствующую запись в DF2:

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

sz = len(DF1[:,0])

for i in range(sz):
DF1[i,"key"] = DF2.filter(
(pl.col("chrom") == DF1[i,"chr"])
& (pl.col("begin") = DF1[i,"end"])
).select('key')[0,0]
Итерация строк в DF выполняется невероятно медленно. Это занимает около 10 часов.
Я также пробовал использовать np.array вместо непосредственного использования df. это немного быстрее, но все равно очень медленно.
Я ищу способ добиться этого, используя собственную структуру данных Polars. У меня нет ключа для присоединения, поэтому стратегии join и join_asof не работают.

Подробнее здесь: https://stackoverflow.com/questions/754 ... ary-values
Ответить

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

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

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

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

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