Правильный способ поиска пропущенных значений из одного кадра данных в другом - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть датафрейм с 2 полями, включая «имя» и «команда» с именем «df1». Я хочу добавить дополнительный столбец с именем «user_id», основанный на user_id каждого человека, который можно найти в отдельном кадре данных, основанном на «команде» этого человека.

Значения "user_id" можно найти в других информационных кадрах, которые разделены полем команды, с именами "df_a", "df_b", "df_c" ... и т. Д. Каждый из этих информационных кадров содержит те же три поля (" name "," team "и" user_id "), но каждый из них содержит только имена из этой команды, и каждый из этих фреймов данных завершен (ни в одном столбце не найдено NaN).

Мне было интересно, каким самым питоническим способом было добавить столбец "user_id" в df1, используя данные из моих командных фреймов (может быть много командных фреймов, но каждый из них относительно небольшой). До сих пор я пробовал циклически проходить через каждый фрейм данных команды и объединять их в df1 на основе поля «name», используя внутреннее и левое слияния, но в результате вывод либо пропускает строки из исходного фрейма, либо выводит много «user_id_x», « user_id_y "столбцы, заполненные NaNs.

Пример кадра данных:

df1:

               name  team     
0          john doe     a       
2          jane doe     b          
3           amy doe     b         
4        jane smith     c         
5      john johnson     c         

df_a:

               name  team     user_id  
0          john doe     a       15368
1        john smith     a       15382
2       sally smith     a       15212

df_b:

               name  team     user_id  
0          jane doe     b        6325
1           amy doe     b        6164
2         sally doe     b        6294

df_c:

               name  team     user_id 
0         steve doe     c       52956
1        jane smith     c       83635  
2      john johnson     c       54871

Это мой желаемый результат после получения значений user_id из каждого фрейма данных команды:

               name  team      user_id   
0          john doe     a        15368
2          jane doe     b         6325
3           amy doe     b         6164  
4        jane smith     c        83635  
5      john johnson     c        54871

Дайте мне знать, если есть что-то, что я могу уточнить, и спасибо заранее!

1 Ответ

0 голосов
/ 03 ноября 2018

попробуйте это,

main_df=pd.concat([df_a,df_b,df_c],ignore_index=True)
df=pd.merge(df,main_df,how='left',on=['name','team'])

конкатить все кадры данных df_x, затем выполнить левое соединение

Выход:

           name team  user_id
0      john doe    a    15368
1      jane doe    b     6325
2       amy doe    b     6164
3    jane smith    c    83635
4  john johnson    c    54871

Выход для print (main_df):

           name team  user_id
0      john doe    a    15368
1    john smith    a    15382
2   sally smith    a    15212
3      jane doe    b     6325
4       amy doe    b     6164
5     sally doe    b     6294
6     steve doe    c    52956
7    jane smith    c    83635
8  john johnson    c    54871
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...