#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