Я хотел бы получить группировку с последующим перекрестным соединением (декартово произведение), где я хочу выполнить расчет между каждой комбинацией внутри каждой группы. (Это также можно понимать как условное соединение).
Я получил образец фрейма данных ниже:
Код: Выделить всё
import polars as pl
df = pl.DataFrame(
{
"garment": ["tshirt", "tshirt", "tshirt", "pants", "pants", "pants", "socks", "socks", "socks"],
"color": ["red", "blue", "green", "yellow", "orange", "purple", "black", "white", "grey"],
"price": [100, 50, 75, 101, 51, 69, 99, 44, 32]
}
)
print(df)
Код: Выделить всё
# for one group
df_pants = df.filter(pl.col('garment') == 'pants')
df_pants.join(df_pants, how="cross").filter(
pl.col('color') != pl.col('color_right') # avoid self-joins
).with_columns(
(pl.col('price') - pl.col('price_right')).abs().alias('difference')
)
Будем благодарны за любую помощь!
Изменить:
Кроме того, хотелось бы, чтобы были только уникальные комбинации. Так что только «оранжевый» и «желтый», но не «желтый» и «оранжевый».
Подробнее здесь: https://stackoverflow.com/questions/769 ... ith-polars