Я пытаюсь добавить новый столбец значений true и false в больший массив данных в зависимости от того, существует ли комбинация значений других столбцов в другом кадре данных или массиве.
Сначала я попробовал это:
Activity = pd.DataFrame(list(itertools.product(ActivityLog1['_created_at$AL'].unique(), _User['_p_user'].unique())),\
columns = ['date','_p_user'])
dft = ActivityLog1[['_created_at$AL','_p_user']].values
Activity['active'] = Activity.apply(lambda x: x[['date','_p_user']].values in dft,axis=1)
Но это заняло столько времени, сколько строк данных, поэтому я изменил функцию применения на это:
Activity['active'] = np.where(Activity[['date','_p_user']].values in dft, True, False)
Я получаю это предупреждение:
C:\Anaconda3\lib\site-packages\ipykernel_launcher.py:6: DeprecationWarning: elementwise == comparison failed; this will raise an error in the future.
Также все возвращаемые значения являются ложными, что не соответствует действительности.
Activity[['date','_p_user']].values
возвращает:
array([[Timestamp('2018-03-27 00:00:00'), 'Y5RKervPy0'],
[Timestamp('2018-03-27 00:00:00'), 'G3zTYHC9qj'],
[Timestamp('2018-03-27 00:00:00'), 'BeLqAK02Zo'],
...,
[Timestamp('2018-09-03 00:00:00'), 'mSEZo8qHe2'],
[Timestamp('2018-09-03 00:00:00'), 'zrERaksxxg'],
[Timestamp('2018-09-03 00:00:00'), '7q6EuwbCgj']], dtype=object)
и
dft
возвращает:
array([[Timestamp('2018-03-27 00:00:00'), 'BoMRF4HvNg'],
[Timestamp('2018-03-27 00:00:00'), 'B2QoOpL3dZ'],
[Timestamp('2018-03-27 00:00:00'), '7G2jZJbzjT'],
...,
[Timestamp('2018-08-17 00:00:00'), 'dMH2WDsbDY'],
[Timestamp('2018-08-27 00:00:00'), 'sW13lwCQEF'],
[Timestamp('2018-09-03 00:00:00'), 'RAJOMMfWH9']], dtype=object)
Есть ли еще лучший и / или более быстрый способ добиться этого?Спасибо.