datapug
datapug

Reputation: 2441

How to collapse the values of a Series where the values are a list into a unique list

Given a Pandas Series like the one below:

0 [ID01]
1 [ID02]
2 [ID05, ID08]
3 [ID09, ID56, ID32]
4 [ID03]

The objective is to get a single list like the one below:

[ID01, ID02, ID05, ID08, ID09, ID56, ID32, ID03]

How do you achieve that in a pythonic way in Python?

Upvotes: 3

Views: 528

Answers (1)

piRSquared
piRSquared

Reputation: 294576

Assuming that is a pandas.Series object

Option 1

Full list

np.concatenate(s).tolist()

Option 1.1

Unique list

np.unique(np.concatenate(s)).tolist()

Option 2

Works if elements are lists. Doesn't work if they are numpy arrays.
Full list

s.sum()

Option 2.1

Unique list

pd.unique(s.sum()).tolist()

Option 3

Full list

[x for y in s for x in y]

Option 3.1

Unique list (Thanks @pault)

list({x for y in s for x in y})

@Wen's Option

list(set.union(*map(set, s)))

Setup

s = pd.Series([
    ['ID01'],
    ['ID02'],
    ['ID05', 'ID08'],
    ['ID09', 'ID56', 'ID32'],
    ['ID03']
])

s

0                [ID01]
1                [ID02]
2          [ID05, ID08]
3    [ID09, ID56, ID32]
4                [ID03]
dtype: object

Upvotes: 3

Related Questions