Код: Выделить всё
df = pl.DataFrame({
'last_name':['James','Warner','Marino','James','Warner','Marino','James'],
'first_name':['Horn','Bro','Kach','Horn','Bro','Kach','Horn'],
'dob':['03/06/1990','09/16/1990','03/06/1990','','03/06/1990','','']
})
Код: Выделить всё
df.group_by('last_name','first_name','dob').len()
Код: Выделить всё
shape: (6, 4)
┌───────────┬────────────┬────────────┬─────┐
│ last_name ┆ first_name ┆ dob ┆ len │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ u32 │
╞═══════════╪════════════╪════════════╪═════╡
│ Warner ┆ Bro ┆ 09/16/1990 ┆ 1 │
│ Marino ┆ Kach ┆ 03/06/1990 ┆ 1 │
│ Marino ┆ Kach ┆ ┆ 1 │
│ James ┆ Horn ┆ ┆ 2 │ # NOT OK
│ James ┆ Horn ┆ 03/06/1990 ┆ 1 │
│ Warner ┆ Bro ┆ 03/06/1990 ┆ 1 │
└───────────┴────────────┴────────────┴─────┘
Поскольку у Джеймса Хорна есть два пустых DOB, их не следует включать в операцию группировки.
Вот ожидаемый результат.
Код: Выделить всё
shape: (4, 4)
┌───────────┬────────────┬────────────┬─────┐
│ last_name ┆ first_name ┆ dob ┆ len │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ u32 │
╞═══════════╪════════════╪════════════╪═════╡
│ Warner ┆ Bro ┆ 03/06/1990 ┆ 1 │
│ James ┆ Horn ┆ 03/06/1990 ┆ 1 │
│ Marino ┆ Kach ┆ 03/06/1990 ┆ 1 │
│ Warner ┆ Bro ┆ 09/16/1990 ┆ 1 │
└───────────┴────────────┴────────────┴─────┘
Код: Выделить всё
df.filter(pl.col.dob != '').group_by('last_name','first_name','dob').len()
Есть ли другое решение?
Подробнее здесь: https://stackoverflow.com/questions/742 ... hon-polars
Мобильная версия