Автоматизировать объединение с произвольным числом столбцов? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть словарь:

#file1 mentions 2 columns while file2 mentions 3
dict2 = ({'file1' : ['colA', 'colB'],'file2' : ['colY','colS','colX'], etc..})

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

for k, v in dict1.items():
    df = pd.DataFrame.from_records(data=arcpy.da.SearchCursor(k, v)) #reads to a df
    df['new'] = df['first_col'].astype(str) + df['second_col'] etc.. #concatenation

Как я могу заставить это работать каждый раз, независимо от количества столбцов в каждом словаре?

Просто объединить все упомянутые столбцы.

UPDATE

пример:

a = {'colA' : [123,124,112,165],'colB' :['alpha','beta','gamma','delta']}
file1 = pd.DataFrame(data = a)
file1

colA   colB
123    alpha
124    beta
112    gamma
165    delta

b = {'colY' : [123,124,112,165],'colS' :['alpha','beta','gamma','delta'], 'colX' :[323,326,378,399] }
file2 = pd.DataFrame(data = b)
file2

colY  colS      colX
123   alpha     323
124   beta      326
112   gamma     378
165   delta     399

Ответы [ 2 ]

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

Просто используйте pd.concat() с axis=1:

import pandas as pd

a = {'colA' : [123,124,112,165],'colB' :['alpha','beta','gamma','delta']}
b = {'colY' : [123,124,112,165],'colS' :['alpha','beta','gamma','delta'], 'colX' :[323,326,378,399] }

df = pd.concat([pd.DataFrame(i) for i in [a,b]], axis=1)

Урожайность:

   colA   colB  colY   colS  colX
0   123  alpha   123  alpha   323
1   124   beta   124   beta   326
2   112  gamma   112  gamma   378
3   165  delta   165  delta   399
0 голосов
/ 02 ноября 2018

Вы должны использовать pandas.concat () с осью = 1, что будет

Объединение объектов DataFrame по горизонтали вдоль оси x, передавая ось = 1.

import pandas as pd

    a = {'colA' : [123,124,112,165],'colB' :['alpha','beta','gamma','delta']}
    df_1 = pd.DataFrame(data = a)

    b = {'colY' : [123,124,112,165],'colS' :['alpha','beta','gamma','delta'], 'colX' :[323,326,378,399] }
    df_2 = pd.DataFrame(data = b)

df_new = pd.concat((df_1, df_2), axis=1)

print(df_new)

Выход:

   colA   colB   colS  colX  colY
0   123  alpha  alpha   323   123
1   124   beta   beta   326   124
2   112  gamma  gamma   378   112
3   165  delta  delta   399   165
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...