Таким образом, вы должны выбрать имена столбцов для конкат, например, первые 3 столбца, выбранные по позициям:
for k, v in dict1.items():
df = pd.DataFrame.from_records(data=arcpy.da.SearchCursor(k, v)) #reads to a df
df['new'] = df.iloc[:, :3].astype(str).apply(' '.join, axis=1)#concatenation
Если создать список возможных имен столбцов, используйте intersection
:
for k, v in dict1.items():
df = pd.DataFrame.from_records(data=arcpy.da.SearchCursor(k, v)) #reads to a df
L = ['colA','colB','colS']
cols = df.columns.intersection(L)
df['new'] = df[cols].astype(str).apply(' '.join, axis=1)#concatenation
Или фильтрация:
for k, v in dict1.items():
df = pd.DataFrame.from_records(data=arcpy.da.SearchCursor(k, v)) #reads to a df
L = ['colA','colB','colS']
mask = df.columns.isin(L)
df['new'] = df.loc[:, mask].astype(str).apply(' '.join, axis=1)#concatenation
EDIT:
Если вы хотите создать другую структуру данных с другим списком имен необходимых столбцов, возможное решение - создать список кортежей:
L = [('file1', ['colA', 'colB'], ['colA','colB']),
('file2', ['colY','colS','colX'], ['colY','colS'])]
for i, j, k in L:
print (i)
print (j)
print (k)
file1
['colA', 'colB']
['colA', 'colB']
file2
['colY', 'colS', 'colX']
['colY', 'colS']
Итак, ваше решение должно быть переписано:
for i, j, k in L:
df = pd.DataFrame.from_records(data=arcpy.da.SearchCursor(i, j)) #reads to a df
df['new'] = df[k].astype(str).apply(' '.join, axis=1)#concatenation