by Anonymous » 14 Apr 2025, 19:09
Ich habe den folgenden Datenrahmen: < /p>
Code: Select all
import polars as pl
df = pl.DataFrame({
'ID': [1, 1, 5, 5, 7, 7, 7],
'YEAR': [2025, 2025, 2023, 2024, 2020, 2021, 2021]
})
shape: (7, 2)
┌─────┬──────┐
│ ID ┆ YEAR │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪══════╡
│ 1 ┆ 2025 │
│ 1 ┆ 2025 │
│ 5 ┆ 2023 │
│ 5 ┆ 2024 │
│ 7 ┆ 2020 │
│ 7 ┆ 2021 │
│ 7 ┆ 2021 │
└─────┴──────┘
< /code>
Jetzt möchte ich die eindeutige Anzahl von Jahren pro ID erhalten, d. H. < /p>
shape: (7, 3)
┌─────┬──────┬──────────────┐
│ ID ┆ YEAR ┆ UNIQUE_YEARS │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ u32 │
╞═════╪══════╪══════════════╡
│ 1 ┆ 2025 ┆ 1 │
│ 1 ┆ 2025 ┆ 1 │
│ 5 ┆ 2023 ┆ 2 │
│ 5 ┆ 2024 ┆ 2 │
│ 7 ┆ 2020 ┆ 2 │
│ 7 ┆ 2021 ┆ 2 │
│ 7 ┆ 2021 ┆ 2 │
└─────┴──────┴──────────────┘
Ich habe also df.with_columns (pl.col ('Jahr') ausprobiert. Over ('id'). alias ('einzigartig_years')) , aber dies gibt das falsche Ergebnis. Also habe ich < /p>
ausgedacht
Code: Select all
df.join(df.group_by('ID').agg(pl.col('YEAR').unique().len().alias('UNIQUE_YEARS')), on='ID', how='left')
< /code>
Was gibt ein korrektes Ergebnis! Aber es sieht ein bisschen klobig aus und ich frage mich, ob es einen natürlicheren Weg mit _columns
und über ?
Ich habe den folgenden Datenrahmen: < /p>
[code]import polars as pl
df = pl.DataFrame({
'ID': [1, 1, 5, 5, 7, 7, 7],
'YEAR': [2025, 2025, 2023, 2024, 2020, 2021, 2021]
})
shape: (7, 2)
┌─────┬──────┐
│ ID ┆ YEAR │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪══════╡
│ 1 ┆ 2025 │
│ 1 ┆ 2025 │
│ 5 ┆ 2023 │
│ 5 ┆ 2024 │
│ 7 ┆ 2020 │
│ 7 ┆ 2021 │
│ 7 ┆ 2021 │
└─────┴──────┘
< /code>
Jetzt möchte ich die eindeutige Anzahl von Jahren pro ID erhalten, d. H. < /p>
shape: (7, 3)
┌─────┬──────┬──────────────┐
│ ID ┆ YEAR ┆ UNIQUE_YEARS │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ u32 │
╞═════╪══════╪══════════════╡
│ 1 ┆ 2025 ┆ 1 │
│ 1 ┆ 2025 ┆ 1 │
│ 5 ┆ 2023 ┆ 2 │
│ 5 ┆ 2024 ┆ 2 │
│ 7 ┆ 2020 ┆ 2 │
│ 7 ┆ 2021 ┆ 2 │
│ 7 ┆ 2021 ┆ 2 │
└─────┴──────┴──────────────┘
[/code]
Ich habe also df.with_columns (pl.col ('Jahr') ausprobiert. Over ('id'). alias ('einzigartig_years')) , aber dies gibt das falsche Ergebnis. Also habe ich < /p>
ausgedacht[code]df.join(df.group_by('ID').agg(pl.col('YEAR').unique().len().alias('UNIQUE_YEARS')), on='ID', how='left')
< /code>
Was gibt ein korrektes Ergebnis! Aber es sieht ein bisschen klobig aus und ich frage mich, ob es einen natürlicheren Weg mit _columns [/code] und über ?