Мне очень сложно придумать код, необходимый для выполнения нижеприведенного. С this есть аналогичный вопрос, но я не могу понять, как адаптировать код к моим потребностям.
У меня есть фрейм данных pandas длиной более 100 тыс. Строк. Вот как выглядит формат адреса и номера квартиры в настоящее время:
Текущий DF:
temp = {'col1': ['220 CENTRAL STREET, 50', '165 EAST 66TH ST, RESI', '106 SPRUCE STREET, 1', '14 EAST 67TH STREET', '1131 OGEN AVENUE', '200 EAST 1ST STREET, RU', '520 PARK LANE', '520 PARK LANE', '80 BAY STREET LANDING, 1A', '520 PARK SOUTH, DPH54', '520 PARK LANE', '62 VEST STREET', '256 FLARIN AVENUE'], 'col2':['50', 'RESI', 'nan', 'nan', 'nan', '2A', 'DPH60', 'DPH56', '1A', 'DPH54', 'DPH52', '21F', 'nan']}
data = pd.DataFrame(temp)
data
col1 col2
0 220 CENTRAL STREET, 50 50
1 165 EAST 66TH ST, RESI RESI
2 106 SPRUCE STREET, 1 nan
3 14 EAST 67TH STREET nan
4 1131 OGEN AVENUE nan
5 200 EAST 1ST STREET, RU 2A
6 520 PARK LANE DPH60
7 520 PARK LANE DPH56
8 80 BAY STREET LANDING, 1A 1A
9 520 PARK SOUTH, DPH54 DPH54
10 520 PARK LANE DPH52
11 62 VEST STREET 21F
12 256 FLARIN AVENUE nan
Требуемый DF (data1), который добавляет 3 новых столбца, чтобы впоследствии обеспечить различные уровни детализацииon:
temp1 = {'col1': ['220 CENTRAL STREET, 50', '165 EAST 66TH ST, RESI', '106 SPRUCE STREET, 1', '14 EAST 67TH STREET', '1131 OGEN AVENUE', '200 EAST 1ST STREET, RU', '520 PARK LANE', '520 PARK LANE', '80 BAY STREET LANDING, 1A', '520 PARK SOUTH, DPH54', '520 PARK LANE', '62 VEST STREET', '256 FLARIN AVENUE'],
'col2':['50', 'RESI', 'nan', 'nan', 'nan', '2A', 'DPH60', 'DPH56', '1A', 'DPH54', 'DPH52', '21F', 'nan'],
'building_address':['220 CENTRAL STREET', '165 EAST 66TH ST', '106 SPRUCE STREET', '14 EAST 67TH STREET', '1131 OGEN AVENUE', '200 EAST 1ST STREET', '520 PARK LANE', '520 PARK LANE', '80 BAY STREET LANDING', '520 PARK SOUTH', '520 PARK LANE', '62 VEST STREET', '256 FLARIN AVENUE'],
'apt_no': ['50', 'RESI', '1', 'nan', 'nan', '2A', 'DPH60', 'DPH56', '1A', 'DPH54', 'DPH52', '21F', 'nan'],
'full_address':['220 CENTRAL STREET, 50', '165 EAST 66TH ST, RESI', '106 SPRUCE STREET, 1', '14 EAST 67TH STREET', '1131 OGEN AVENUE', '200 EAST 1ST STREET, 2A', '520 PARK LANE, DPH60', '520 PARK LANE, DPH56', '80 BAY STREET LANDING, 1A', '520 PARK SOUTH, DPH54', '520 PARK LANE, DPH52', '62 VEST STREET, 21F', '256 FLARIN AVENUE']}
data1 = pd.DataFrame(temp1)
data1
col1 col2 building_address apt_no \
0 220 CENTRAL STREET, 50 50 220 CENTRAL STREET 50
1 165 EAST 66TH ST, RESI RESI 165 EAST 66TH ST RESI
2 106 SPRUCE STREET, 1 nan 106 SPRUCE STREET 1
3 14 EAST 67TH STREET nan 14 EAST 67TH STREET nan
4 1131 OGEN AVENUE nan 1131 OGEN AVENUE nan
5 200 EAST 1ST STREET, RU 2A 200 EAST 1ST STREET 2A
6 520 PARK LANE DPH60 520 PARK LANE DPH60
7 520 PARK LANE DPH56 520 PARK LANE DPH56
8 80 BAY STREET LANDING, 1A 1A 80 BAY STREET LANDING 1A
9 520 PARK SOUTH, DPH54 DPH54 520 PARK SOUTH DPH54
10 520 PARK LANE DPH52 520 PARK LANE DPH52
11 62 VEST STREET 21F 62 VEST STREET 21F
12 256 FLARIN AVENUE nan 256 FLARIN AVENUE nan
full_address
0 220 CENTRAL STREET, 50
1 165 EAST 66TH ST, RESI
2 106 SPRUCE STREET, 1
3 14 EAST 67TH STREET
4 1131 OGEN AVENUE
5 200 EAST 1ST STREET, 2A
6 520 PARK LANE, DPH60
7 520 PARK LANE, DPH56
8 80 BAY STREET LANDING, 1A
9 520 PARK SOUTH, DPH54
10 520 PARK LANE, DPH52
11 62 VEST STREET, 21F
12 256 FLARIN AVENUE
В существующем DF (данные) col1 - это адрес улицы, который может содержать или не содержать номер квартиры. Для простоты я предполагаю, что значения в столбце col1 будут иметь номер квартиры, если есть запятая. Часть после запятой может рассматриваться как номер квартиры.
col2 содержит только номер квартиры. У него есть Нэн в колонке. В некоторых случаях, например в строке 5, номер квартиры в col2 ('2A') не будет совпадать с частью после запятой в col1 ('RU'). В других случаях, как в строке 2, col2 может быть nan, но col1 имеет номер квартиры после запятой.
Что я хочу сделать, это добавить 3 новых столбца (показанных в Желаемых данных DF1):
['building_address'], по сути, будет содержать все, что находится перед запятой, поэтому будет написано '220 CENTRAL STREET', тогда как col1 скажет '220 CENTRAL STREET, 50'
['apt_no'] будетпроверьте, есть ли нан. Если есть, он будет проверять в столбце col1 значение после запятой. Если проверка прошла успешно, это значение будет занесено в col2. Так, например, в строке 2 data1 apt_no примет значение «1», полученное из части после запятой в col1. Он также проверит, есть ли часть после запятой в col1, и есть ли значение в col2, и если они отличаются, он примет значение в col2. Например, в строке 5 apt_no имеет значение '2A', взятое из col2, даже если col1 показывает 'RU' после запятой. Наконец, если в столбце col1 нет запятой, а столбец col2 равен nan, то apt_no просто остается nan.
['full_address'], наконец, 'full address' объединит ['address address'] и ['apt_no'] в 1 строку в формате адреса здания, apt_no (показано выше). Если «apt_no» равно nan, то «полный адрес» будет таким же, как «col1»
Я боролся с этим часами, но не нашел способа сделать это. Спасибо за поиск.