Разделить фрейм данных по нескольким столбцам на несколько - PullRequest
1 голос
/ 16 мая 2019

Рассмотрим следующий кадр данных df:

df = pd.DataFrame(dict(
        Id = [1, 2, 3, 3],
        Country=['jp', 'cn', 'uk', 'uk'],
        Sales = [5, 3, 3, 4]
    ))

print(df)
   Id Country  Sales
0   1      jp      5
1   2      cn      3
2   3      uk      3
3   3      uk      4

Я хочу перебирать и группировать столбцы Id и Country и писать в Excel:

for n, g in df.groupby(['Id', 'Country']):
    print(n)
    # `n` is the group name, which will be the country
    g.to_excel('{}.xlsx'.format(n), index = False)

Это будетсоздайте файлы: ["(1, 'jp').xlsx", "(2, 'cn').xlsx", "(3, 'uk').xlsx"], но я хочу формат: ["1-jp.xlsx", "2-cn.xlsx", "3-uk.xlsx"].

Как я могу получить его в Pandas?Спасибо.

Ответы [ 2 ]

1 голос
/ 16 мая 2019
for n, g in df.groupby(['Id', 'Country']):
    print(n)
    g.to_excel('{}.xlsx'.format("_".join([str(x) for x in n]), index = False)
1 голос
/ 16 мая 2019

Вы можете распаковать кортеж с переменными a и b и перейти к функции format:

for (a, b), g in df.groupby(['Id', 'Country']):
    print(a, b)
    # `n` is the group name, which will be the country
    g.to_excel('{}_{}.xlsx'.format(a, b), index = False)

Или выбрать кортежи по позиции с помощью индексации:

for n, g in df.groupby(['Id', 'Country']):
    print(n)
    # `n` is the group name, which will be the country
    g.to_excel(f'{n[0]}_{n[1]}.xlsx'.format(n), index = False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...