How can I group rows which have at least one value in common? I can pass multiple columns to groupby but I want any one of them to be considered, not all of them.
Sample code:
import pandas as pd
input = pd.DataFrame({
'fruit': ['peach', 'banana', pd.NA, 'peach', 'apple', 'avocado', pd.NA],
'vegetable': [pd.NA, pd.NA, 'zucchini', pd.NA, pd.NA, pd.NA, 'potato'],
'sugar': [17, 17, 2, 18, 20, pd.NA, 4],
'color': ['orange', 'yellow', 'green', 'orange', 'red', 'green', 'brown']
})
output = input.groupby(['fruit', 'vegetable', 'sugar', 'color']).agg({
'fruit': lambda x: list(set(x)),
'vegetable': lambda x: list(set(x)),
'sugar': lambda x: list(set(x)),
'color': lambda x: list(set(x))
})
Input:
fruit vegetable sugar color
0 peach 17 orange
1 banana 17 yellow
2 zucchini 2 green
3 peach 18 orange
4 apple 20 red
5 avocado green
6 potato 4 brown
Expected output:
fruit vegetable sugar color
0 [peach, banana] [] [17, 18] [orange, yellow]
1 [avocado] [zucchini] [2] [green]
2 [apple] [] [20] [red]
3 [] [potato] [4] [brown]
