Como posso criar a type
coluna reciclando uma lista de dois elementos ["lat","lon"]
?
endereço | coordenar | tipo |
---|---|---|
"lugar 1" | 48.943837 | tarde |
"lugar 1" | 2.387917 | muito tempo |
"lugar 2" | 37.843837 | tarde |
"lugar 2" | 6.387917 | muito tempo |
Como seria feito automaticamente em R comd$type <- c("lat","lon")
Reprex:
d0 = pl.DataFrame(
{
"adresse": ["place 1", "place 2"],
"coord": [[48.943837, 2.387917], [37.843837, 6.387917]],
}
)
d1 = d0.explode("coord")
O que eu tentei:
d1 = d1.with_columns(type=pl.Series(["1","2"]))
# ShapeError: unable to add a column of length 2 to a DataFrame of height 4
d1 = d1.join(pl.DataFrame({"id":["1", "2"]}), how="cross")
# logically, 8 rows instead of 4
pl.int_range()
epl.len()
para criar um "número de linha".pl.Expr.over()
para fazer isso dentroadresse
da coluna.Ou se você precisar
polars.datatypes.Enum()
:Como alternativa, você pode primeiro criar listas adicionais
pl.int_ranges()
e depois explodir ambas as listas juntas, para não precisarpl.Expr.over()
da função window.A transmissão em estilo R geral pode ser implementada de forma similar à solução proposta por @roman. Para evitar um
OutOfBoundsError
, quando há menos categorias do que linhas (ou seja, transmissão verdadeirapl.Expr.mod
), pode ser usado.Aqui estão duas opções sem Enums
Um com
d0
e o outro assumindo que você já crioud1