Код: Выделить всё
df = pl.from_repr("""
┌────────┬──────┬──────┬──────┬──────┐
│ region ┆ time ┆ sen1 ┆ sen2 ┆ sen3 │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ f64 ┆ f64 ┆ f64 │
╞════════╪══════╪══════╪══════╪══════╡
│ us ┆ 1 ┆ 10.0 ┆ 11.0 ┆ 12.0 │
│ us ┆ 2 ┆ 11.0 ┆ 14.0 ┆ 13.0 │
│ us ┆ 3 ┆ 10.1 ┆ 10.0 ┆ 12.3 │
│ us ┆ 4 ┆ 13.0 ┆ 11.1 ┆ 14.0 │
│ us ┆ 5 ┆ 12.0 ┆ 11.0 ┆ 19.0 │
│ uk ┆ 1 ┆ 10.0 ┆ 11.0 ┆ 12.1 │
│ uk ┆ 2 ┆ 11.0 ┆ 14.0 ┆ 13.0 │
│ uk ┆ 3 ┆ 10.1 ┆ 10.0 ┆ 12.0 │
│ uk ┆ 4 ┆ 13.0 ┆ 11.1 ┆ 14.0 │
│ uk ┆ 5 ┆ 12.0 ┆ 11.0 ┆ 19.0 │
│ uk ┆ 6 ┆ 13.7 ┆ 11.1 ┆ 14.0 │
│ uk ┆ 7 ┆ 12.0 ┆ 11.0 ┆ 21.9 │
└────────┴──────┴──────┴──────┴──────┘
""")
Итак, я написал приведенную ниже агрегатную функцию:
Код: Выделить всё
def my_custom_agg(t,v):
smax = v.max()
smin = v.min()
smax_t = t[v.arg_max()]
smin_t = t[v.arg_max()]
return [smax, smin, smax_t, smin_t]
Код: Выделить всё
df.group_by('region').agg(
pl.all().map_elements(lambda s: my_custom_agg(pl.col('time'),s))
)
Код: Выделить всё
TypeError: 'Expr' object is not subscribable
Код: Выделить всё
region sen1 sen2 sen3
us [13.0,10.0,4,1] [14.0,10.0,2,3] [19.0,12.0,5,1]
uk [13.7,10.0,6,1] [14.0,10.0,2,3] [21.9,12.0,7,3]
# which I will unpivot and transform to below,
region sname smax smin smax_t smin_t
us sen1 13.0 10.0 4 1
us sen2 14.0 10.0 2 3
us sen3 19.0 12.0 5 1
uk sen1 13.7 10.0 6 1
uk sen2 14.0 10.0 2 3
uk sen3 21.9 12.0 7 3
Примечание: в моем реальном наборе данных у меня есть датчики 8 тыс., так что это так. лучше использовать pl.all().
Спасибо за поддержку.
Подробнее здесь: https://stackoverflow.com/questions/743 ... ass-one-ad