Присвоение имен файлам Excel с использованием значений столбцов псевдонимов для этих значений в python

#python #excel #pandas #dataframe #naming

#python #excel #pandas #фрейм данных #присвоение имен

Вопрос:

DF выглядит примерно так и распространяется на тысячи строк (т.Е. Возможна любая комбинация ‘Type’ amp; ‘Name’)

 | total |  big  |  med  | small|   Type   |   Name   |
|:-----:|:-----:|:-----:|:----:|:--------:|:--------:| 
|   5   |   4   |   0   |   1  |   Pig    |   John   |
|   6   |   0   |   3   |   3  |  Horse   |   Mike   | 
|   5   |   2   |   3   |   0  |   Cow    |   Rick   |
|   5   |   2   |   3   |   0  |   Horse  |   Rick   |
|   5   |   2   |   3   |   0  |   Cow    |   John   |
|   5   |   2   |   3   |   0  |   Pig    |   Mike   |
  

Я сгруппировал фрейм данных по «типу» и «Имени».

 | total |  big  |  med  | small|   Type   |   Name   |
|:-----:|:-----:|:-----:|:----:|:--------:|:--------:| 
|   5   |   4   |   0   |   1  |   Pig    |   John   |
|   6   |   0   |   3   |   3  |   Pig    |   John   | 
|   5   |   2   |   3   |   0  |   Pig    |   John   |
|   5   |   2   |   3   |   0  |   Pig    |   John   |
  

Затем запустите функции для каждого сгруппированного фрейма данных соответственно.

 for idx, df in data.groupby(['Type', 'Name']):
     function_1(df)
     function_2(df)

    with pd.ExcelWriter(f"{'_'.join(idx)}.xlsx") as writer:
        table_1.to_excel(writer, sheet_name='Table 1', index=False)
        table_2.to_excel(writer, sheet_name='Table 2', index=False)
  

В результате получается имя файла:

 "Pig_John.xlsx"
  

Я хотел бы добавить псевдонимы для замены каждого «типа» и «Имени» соответственно, как показано ниже.

 Aliases: 

Pig = Type1
Horse = Type2
Cow = Type3
John = Name1
Mike = Name2
Rick = Name3

Example Result:

Pig_John.xlsx = Type1_Name1.xlsx
Horse_Rick.xlsx = Type2_Name3.xlsx
  

Ответ №1:

Вы можете создать словарь, а затем вызвать ключи и значения словаря, создавая новый idx с каждым циклом с idx = (dct[idx[0]], dct[idx[1]]) :

 dct = {'Pig' : 'Type1',
'Horse' : 'Type2',
'Cow' : 'Type3',
'John' : 'Name1',
'Mike' : 'Name2',
'Rick' : 'Name3'}

df=d.copy()
for idx, d in df.groupby(['Type', 'Name']):
    idx = (dct[idx[0]], dct[idx[1]])
    print(f"{'_'.join(idx)}.xlsx")

Out[1]:
Type3_Name1.xlsx
Type3_Name3.xlsx
Type2_Name2.xlsx
Type2_Name3.xlsx
Type1_Name1.xlsx
Type1_Name2.xlsx