Перебирать строки и присоединяться к pandon pandas

Kumar AK спросил: 12 мая 2018 в 04:09 в: python

У меня есть базовый набор данных, подобный этому.

master = pd.DataFrame({'Channel':['1','1','1','1','1'],'Country':['India','Singapore','Japan','United Kingdom','Austria'],'Product':['X','6','7','X','X']})

и таблица пользователя, подобная это

user = pd.DataFrame({'User':['101','101','102','102','102','103','103','103','103','103'],'Country':['India','Brazil','India','Brazil','Japan','All','Austria','Japan','Singapore','United Kingdom'],'count':['2','1','3','2','1','1','1','1','1','1']})

Мне нужно, чтобы главная таблица оставила соединение с пользовательской таблицей для каждого пользователя , как ниже для одного пользователя

   merge_101 = pd.merge(master,user[(user.User=='101')],how='left',on=['Country'])
   merge_102 = pd.merge(master,user[(user.User=='102')],how='left',on=['Country'])
   merge_103 = pd.merge(master,user[(user.User=='103')],how='left',on=['Country'])
   merge_all = pd.concat([merge_101, merge_102,merge_103], ignore_index=True)

, как итерации каждого пользователя здесь. Я сначала фильтрую набор данных и создаю другой набор данных и добавляю весь набор данных позже.

Есть ли лучший способ выполнить эту задачу, например, для цикла или любых объединений?

Спасибо

1 ответ

Есть решение
Harv Ipan ответил: 12 мая 2018 в 04:51

IIUC, вам нужно:

pd.concat([pd.merge(master,user[(user.User==x)],how='left',on=['Country']) for x in list(user['User'].unique())], ignore_index=True)

Выход:

    Channel         Country Product User count
0        1           India       X  101     2
1        1       Singapore       6  NaN   NaN
2        1           Japan       7  NaN   NaN
3        1  United Kingdom       X  NaN   NaN
4        1         Austria       X  NaN   NaN
5        1           India       X  102     3
6        1       Singapore       6  NaN   NaN
7        1           Japan       7  102     1
8        1  United Kingdom       X  NaN   NaN
9        1         Austria       X  NaN   NaN
10       1           India       X  NaN   NaN
11       1       Singapore       6  103     1
12       1           Japan       7  103     1
13       1  United Kingdom       X  103     1
14       1         Austria       X  103     1
Kumar AK ответил: 12 мая 2018 в 04:46
Я отредактировал мой вопрос. посмотрите пожалуйста.
Harv Ipan ответил: 12 мая 2018 в 04:51
@KumarAK См. Редактирование.