chuachu
chuachu

Reputation: 23

Merging unique values from two different columns into a list

How do I merge the unique values in columns A and B from df into list?

id  A   B
1   x   k
2   y   x
3   x   l
4   x   k

This is what I am trying to achieve:

list = ['x', 'y', 'k', 'l']

Failed attempt:

list = df['A'].unique().tolist()
list.append(df['B'].unique())

The output:

['x', 'y', ['x', 'k', 'l']]

Upvotes: 0

Views: 102

Answers (2)

jezrael
jezrael

Reputation: 863361

Use pandas.unique with numpy.ravel for unique values in original ordering:

L = pd.unique(np.ravel(df[['A','B']], order='F')).tolist()

Another solutions with DataFrame.unstack or DataFrame.melt and Series.unique

L = df[['A','B']].unstack().unique().tolist()
L = df[['A','B']].melt()['value'].drop_duplicates().tolist()
L = df[['A','B']].melt()['value'].unique().tolist()
L = df[['A','B']].melt()['value'].drop_duplicates().tolist()
print (L)
['x', 'y', 'k', 'l']

Upvotes: 2

Corralien
Corralien

Reputation: 120509

Use np.ravel and np.unique:

# Global unique
>>> np.unique(np.ravel(df[['A', 'B']])).tolist()
['k', 'l', 'x', 'y']

# Per column unique
>>> df['A'].unique().tolist() + df['B'].unique().tolist()
['x', 'y', 'k', 'x', 'l']

Upvotes: 3

Related Questions