Получение группового ключа при использовании группы путем применения (списка)

Я впервые работаю с Pandas, поэтому я совершенно новичок в этом. Мне удалось сгруппировать список экземпляров для каждой учетной записи. Теперь, просматривая этот список, мне понадобится номер учетной записи (групповой ключ), чтобы иметь возможность что-то с ним сделать.

Это пример файла csv:

введите сюда описание изображения

#Using Pandas
df = pd.read_csv(os.path.join(__location__, 'instances.csv'))
df_group = df.groupby('account')['instance-id'].apply(list)
print(df_group.groups.keys())
for account in df_group:
    #Initialize Prettytable
    t = PrettyTable(['Instance ID', 'Instance Name', 'AMI-ID', 'AMI Name'])

    #Initialize the EC2 client to assume role
    sts = boto3.client('sts')
    assume_role = sts.get_caller_identity().get('Arn').split('/')[1]
    assumed_role=sts.assume_role( RoleArn = "arn:aws:iam::" + str(account[0]) + ":role/" + assume_role, RoleSessionName= 'Temporary_Session' )

Я читал о получении ключа с помощью groups.key(), но кажется, что, когда он уже преобразован в список, сделать это таким образом невозможно, поскольку при попытке я получаю следующую ошибку.

line 9, in <module> print(df_group.groups.keys())
line 6299, in __getattr__return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'groups'. Did you mean: 'groupby'?

В конце я пытаюсь получить номер учетной записи, чтобы иметь возможность использовать sts, чтобы взять на себя другую роль.

Воспроизводимый ввод:

import pandas as pd

data = {
    'account': [
        '111111111111111', '111111111111111', '111111111111111', '111111111111111',
        '111111111111111', '111111111111111', '222222222222222', '222222222222222',
        '222222222222222', '222222222222222', '222222222222222', '222222222222222'
    ],
    'instance-id': [
        'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c7',
        'i-124f1c3c401ijk3c8', 'i-124f1c3c401ijk3c9', 'i-124f1c3c401ijk3c176', 'i-124f1c3c401ijk3c177',
        'i-124f1c3c401ijk3c178', 'i-124f1c3c401ijk3c179', 'i-124f1c3c401ijk3c180', 'i-124f1c3c401ijk3c182'
    ]
}

df = pd.DataFrame(data)

🤔 А знаете ли вы, что...
В Python есть инструменты для создания графиков и визуализации данных, такие как библиотеки Matplotlib и Seaborn.


2
51
1

Ответ:

Решено

Вам следует использовать Series.items:

for group, account in df_group.items():
    print(f'{group=}')
    print(account)

Или, может быть, лучше, не агрегируйте и не перебирайте объект GroupBy:

for group, account in df.groupby('account')['instance-id']:
    print(f'{group=}')
    print(list(account))

Выход:

group='111111111111111'
['i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c4', 'i-124f1c3c401ijk3c7', 'i-124f1c3c401ijk3c8', 'i-124f1c3c401ijk3c9']
group='222222222222222'
['i-124f1c3c401ijk3c176', 'i-124f1c3c401ijk3c177', 'i-124f1c3c401ijk3c178', 'i-124f1c3c401ijk3c179', 'i-124f1c3c401ijk3c180', 'i-124f1c3c401ijk3c182']