Вы можете добавить обе колонки вместе, чтобы получить список, который вы ищете, а затем использовать df.drop()
с axis=1
для удаления столбцов ids_x
и ids_y
. Пример -
df = pd.merge(df1, df2, on='date', sort=False)
df['ids'] = df['ids_x'] + df['ids_y']
df = df.drop(['ids_x','ids_y'],axis=1)
Demo -
In [65]: df
Out[65]:
date ids_x ids_y
0 2015-10-13 [978] [978, 12]
1 2015-10-14 [978, 121] [2, 1]
In [67]: df['ids'] = df['ids_x'] + df['ids_y']
In [68]: df
Out[68]:
date ids_x ids_y ids
0 2015-10-13 [978] [978, 12] [978, 978, 12]
1 2015-10-14 [978, 121] [2, 1] [978, 121, 2, 1]
In [70]: df = df.drop(['ids_x','ids_y'],axis=1)
In [71]: df
Out[71]:
date ids
0 2015-10-13 [978, 978, 12]
1 2015-10-14 [978, 121, 2, 1]
Если вы хотите удалить повторяющиеся значения, а также, и вы не заботиться о порядке, то вы можете использовать Series.apply
, а затем преобразовать список до set
, а затем обратно до list
. Пример -
df['ids'] = df['ids'].apply(lambda x: list(set(x)))
Demo -
In [72]: df['ids'] = df['ids'].apply(lambda x: list(set(x)))
In [73]: df
Out[73]:
date ids
0 2015-10-13 [978, 12]
1 2015-10-14 [121, 978, 2, 1]
Или, как спросил в комментариях, если вы хотите сделать это с numpy.unique()
, вы можете использовать его вместе с Series.apply
, а также -
import numpy as np
df['ids'] = df['ids'].apply(lambda x: np.unique(x))
Демо-версия -
In [79]: df['ids'] = df['ids'].apply(lambda x: np.unique(x))
In [80]: df
Out[80]:
date ids
0 2015-10-13 [12, 978]
1 2015-10-14 [1, 2, 121, 978]
Не существует способа сбросить дубликаты с помощью 'numpy.unique()', поскольку он намного эффективнее, чем 'set()'? – ALH
Да, возможно, добавлено, что и ответ. –
Отличный ответ. Благодарю вас за время. +1 – ALH