Создание нового столбца во фрейме данных путем сопоставления нескольких столбцов в пандах - PullRequest
0 голосов
/ 02 октября 2018

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

df1 = pd.DataFrame()
df1['Date'] = ['2018-08-10','2018-08-10','2018-08-10','2018-08-10','2018-08-10',
               '2018-08-11','2018-08-11','2018-08-11','2018-08-12','2018-08-12',
               '2018-08-13','2018-08-12','2018-08-12','2018-08-12','2018-08-12']
df1['Name'] = ['A','A','A','A','A',
              'B','B','B','C','C',
              'D','D','E','F','F']
df1 ['Orgz'] = ['Alpha','Alpha','Alpha','Alpha','Alpha',
               'Beta','Beta','Beta','Gamma','Gamma',
               'Theta','Theta','Theta','Theta','Theta']
df2 = pd.DataFrame()
df2['Date'] = ['2018-08-10','2018-08-11','2018-08-12','2018-08-12','2018-08-13','2018-08-12','2018-08-12']
df2['Name'] = ['A','B','C','D','D','E','F']
df2 ['Orgz']= ['Alpha','Beta','Gamma','Theta','Theta','Theta','Theta']
df2 ['min'] = [60,85,90,77,25,20,30]

Я хочу сопоставить столбец df2.min с df1, создав новый столбец.Однако у меня есть три общих столбца: «Дата», «Имя» и «Орг. На карту».В этом случае я не могу просто использовать Имя для сопоставления, так как в моей фактической базе данных будет одно и то же имя на другую дату.Поэтому я решил использовать три столбца (Дата, Оргз и Имя) для сопоставления с df2.Результат будет перенесен в новый столбец в df1.Мой фактический результат будет выглядеть следующим образом:

enter image description here

Из результатов вы заметите, что некоторые имена совпадают на одну и ту же дату.в этом случае я просто хочу отобразить минимальное значение в первой строке, остальные строки равны 0.

Как я могу это сделать?

Спасибо, Zep

1 Ответ

0 голосов
/ 02 октября 2018

Полагаю, вам нужно merge с левым соединением, а затем установите 0 с помощью numpy.where с логической маской, созданной DataFrame.duplicated:

df3 = df1.merge(df2, on=['Date','Name','Orgz'], how='left')
df3['min'] = np.where(df3.duplicated(subset=['Date','Name','Orgz']), 0, df3['min'])
print (df3)
          Date Name   Orgz  min
0   2018-08-10    A  Alpha   60
1   2018-08-10    A  Alpha    0
2   2018-08-10    A  Alpha    0
3   2018-08-10    A  Alpha    0
4   2018-08-10    A  Alpha    0
5   2018-08-11    B   Beta   85
6   2018-08-11    B   Beta    0
7   2018-08-11    B   Beta    0
8   2018-08-12    C  Gamma   90
9   2018-08-12    C  Gamma    0
10  2018-08-13    D  Theta   77
11  2018-08-13    D  Theta    0
12  2018-08-12    E  Theta   25
13  2018-08-12    F  Theta   30
14  2018-08-12    F  Theta    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...