Polars `join_asof` с повторяющимися значениями `by`, дающими неправильные результатыPython

Программы на Python
Ответить
Anonymous
 Polars `join_asof` с повторяющимися значениями `by`, дающими неправильные результаты

Сообщение Anonymous »

Вот два фрейма данных

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

import polars as pl

df1 = pl.from_repr("""
┌────────┬───────┐
│ title1 ┆ year1 │
│ ---    ┆ ---   │
│ str    ┆ i64   │
╞════════╪═══════╡
│ abc    ┆ 2016  │
│ abc    ┆ 2000  │
│ def    ┆ 1934  │
└────────┴───────┘
""")

df2 = pl.from_repr("""
┌────────┬───────────┬───────┬──────┐
│ title2 ┆ director2 ┆ year2 ┆ val2 │
│ ---    ┆ ---       ┆ ---   ┆ ---  │
│ str    ┆ str       ┆ i64   ┆ str  │
╞════════╪═══════════╪═══════╪══════╡
│ abc    ┆ john      ┆ 2001  ┆ A    │
│ abc    ┆ paul      ┆ 2018  ┆ B    │
│ def    ┆ peter     ┆ 2016  ┆ C    │
└────────┴───────────┴───────┴──────┘
""")
Делая следующее, я ожидаю, что строки 3 df1 и df2 совпадут, что и происходит. Но Я также ожидаю, что строки 1 и 2 будут соответствовать строкам 2 и 1 в df1 и df2 соответственно, поскольку 2016 год ближе к 2018 году, а 2000 год ближе к 2001 году.

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

df1.join_asof(df2, left_on = "year1", right_on = "year2", by_left = ["title1"], by_right = ["title2"], strategy = "nearest")

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

┌────────┬───────┬───────────┬───────┬──────┐
│ title1 ┆ year1 ┆ director2 ┆ year2 ┆ val2 │
│ ---    ┆ ---   ┆ ---       ┆ ---   ┆ ---  │
│ str    ┆ i64   ┆ str       ┆ i64   ┆ str  │
╞════════╪═══════╪═══════════╪═══════╪══════╡
│ abc    ┆ 2016  ┆ paul      ┆ 2018  ┆ B    │
│ abc    ┆ 2000  ┆ paul      ┆ 2018  ┆ B    │
│ def    ┆ 1934  ┆ peter     ┆ 2016  ┆ C    │
└────────┴───────┴───────────┴───────┴──────┘
Но строки 1 и 2 df1 вместо этого совпадают со строкой 2 df2.
Чтобы внести ясность, я ожидал, что результат будет следующим:

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

expected = pl.from_repr("""
┌────────┬───────┬───────────┬───────┬──────┐
│ title1 ┆ year1 ┆ director2 ┆ year2 ┆ val2 │
│ ---    ┆ ---   ┆ ---       ┆ ---   ┆ ---  │
│ str    ┆ i64   ┆ str       ┆ i64   ┆ str  │
╞════════╪═══════╪═══════════╪═══════╪══════╡
│ abc    ┆ 2016  ┆ paul      ┆ 2018  ┆ B    │
│ abc    ┆ 2000  ┆ john      ┆ 2001  ┆ A    │
│ def    ┆ 1934  ┆ peter     ┆ 2016  ┆ C    │
└────────┴───────┴───────────┴───────┴──────┘
""")
Моя проблема выделена жирным шрифтом: почему этого не происходит? Связано ли это как-то с дублированием группы abc?


Подробнее здесь: https://stackoverflow.com/questions/784 ... ng-results
Ответить

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

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

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

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

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