Вы можете использовать map
:
#create dictionary with keys created by tuples
z = zip(designations['date'], designations['designation'], designations['ids'])
d = {(i, x):j for i, j, k in z for x in k}
d = {('2017-11-21', 1): 'a', ('2017-11-21', 10): 'a', ('2017-11-21', 2): 'b',
('2017-11-21', 9): 'b', ('2017-11-21', 3): 'c', ('2017-11-21', 8): 'c',
('2017-11-21', 4): 'd', ('2017-11-21', 7): 'd', ('2017-11-21', 5): 'e',
('2017-11-21', 6): 'e', ('2018-01-01', 1): 'f', ('2018-01-01', 2): 'f',
('2018-01-01', 3): 'g', ('2018-01-01', 4): 'g', ('2018-01-01', 5): 'h',
('2018-01-01', 6): 'h', ('2018-01-01', 7): 'i', ('2018-01-01', 8): 'i',
('2018-01-01', 9): 'j', ('2018-01-01', 10): 'j'}
#convert 2 columns to tuples
s = pd.Series(list(map(tuple, teams[['date','team_member_1']].values.tolist())))
print (s)
0 (2017-11-21, 1)
1 (2017-11-21, 2)
2 (2017-11-21, 3)
3 (2017-11-21, 4)
4 (2017-11-21, 5)
5 (2018-01-01, 1)
6 (2018-01-01, 2)
7 (2018-01-01, 3)
8 (2018-01-01, 4)
9 (2018-01-01, 5)
dtype: object
teams['id'] = s.map(d)
print (teams)
date team_member_1 team_member_2 id
0 2017-11-21 1 6 a
1 2017-11-21 2 7 b
2 2017-11-21 3 8 c
3 2017-11-21 4 9 d
4 2017-11-21 5 10 e
5 2018-01-01 1 10 f
6 2018-01-01 2 9 f
7 2018-01-01 3 8 g
8 2018-01-01 4 7 g
9 2018-01-01 5 6 h
Я думаю .apply(pd.Series)
это nort recomenedd, если нужно хорошее решение для производительности.
Лучше использовать DataFrame
Конструктор:
cols = designations.columns.difference(['ids']).tolist()
df1 = designations.set_index(cols)['ids']
df2 = pd.DataFrame(df1.values.tolist(), index=df1.index).stack().reset_index(name='id')
Или решение numpy:
from itertools import chain
idx = designations.index.repeat(designations['ids'].str.len())
df2 =(designations.reindex(idx)
.assign(id=list(chain.from_iterable(designations['ids'].tolist())))
.drop('ids', axis=1))
teams = teams.merge(df2.rename(columns={'id':'team_member_1'}),
on=['date','team_member_1'],
how='left')
print (teams)
date team_member_1 team_member_2 designation
0 2017-11-21 1 6 a
1 2017-11-21 2 7 b
2 2017-11-21 3 8 c
3 2017-11-21 4 9 d
4 2017-11-21 5 10 e
5 2018-01-01 1 10 f
6 2018-01-01 2 9 f
7 2018-01-01 3 8 g
8 2018-01-01 4 7 g
9 2018-01-01 5 6 h