Как создать вложенный список динамически внутри цикла для цикла и рекурсивно добавить его к конечному набору результатовPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как создать вложенный список динамически внутри цикла для цикла и рекурсивно добавить его к конечному набору результатов

Сообщение Anonymous »

У меня есть следующий скрипт Python, который я хотел бы изменить, чтобы создать новую вложенную для цикла внутри j in i ["attributes"] 'для динамического извлечения для каждого клиента_ида Списка его политики_no и связанных с ними атрибутов ( company_id, front_id и pecipt_no ):

Код: Выделить всё

import pandas as pd

df = pd.DataFrame({
'type': ['customer','customer','customer','customer'],
'customer_id': ['1-0000001','1-0000001','1-0000002','1-0000002'],
'u_fn': ['TestUser1_FirstName','TestUser1_FirstName','TestUser2_FirstName','TestUser2_FirstName'],
'u_ln': ['TestUser1_LastName','TestUser1_LastName','TestUser2_LastName','TestUser2_LastName'],
'Customer_Type_ID': ['ΦΥΣΙΚΟ','ΦΥΣΙΚΟ','ΦΥΣΙΚΟ','ΦΥΣΙΚΟ'],
'u_em': ['[email protected]','[email protected]','[email protected]','[email protected]'],
'u_mb': ['6900000001','6900000001','6900000002','6900000002'],
'# of policies':[2,2,2,2],
'Company_ID': [2,2,2,2],
'Branch_ID': [5,5,5,5],
'Policy_No': ['000000001','000000001','000000002','000000002'],
'Receipt_No': ['420000001','420000002','430000001','430000002']
})

grouped = df.groupby('customer_id').apply(lambda x: x[['u_fn', 'u_ln', 'Customer_Type_ID', 'u_em','u_mb',
'Company_ID', 'Branch_ID', 'Policy_No',
'Receipt_No', '# of policies']].to_dict('records'), include_groups=False).reset_index()

grouped.columns = ['customer_id', 'attributes']  # Column names for grouped DataFrame

output = grouped.to_dict('records')

results = []

for i in output:

attributes = {}
for j in i["attributes"]:
attributes["u_fn"] = j["u_fn"]
attributes["u_ln"] = j["u_ln"]
attributes["Customer_Type_ID"] = j["Customer_Type_ID"]
attributes["u_em"] = j["u_em"]
attributes["u_mb"] = j["u_mb"]
attributes["# of policies"] = j["# of policies"]
attributes["Company_ID"] = j["Company_ID"]
attributes["Branch_ID"] = j["Branch_ID"]
attributes["Policy_No"] = j["Policy_No"]
attributes["Receipt_No"] = j["Receipt_No"]

contact = {
"Id": i["customer_id"],
"attributes": attributes
}
results.append(contact)
< /code>
Запуск этого сценария, значение списка «результатов» - следующее: < /p>
[{
'Id': '1-0000001',
'attributes': {
'u_fn': 'TestUser1_FirstName',
'u_ln': 'TestUser1_LastName',
'Customer_Type_ID': 'ΦΥΣΙΚΟ',
'u_em': '[email protected]',
'u_mb': '6900000001',
'# of policies': 2,
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000001',
'Receipt_No': '420000002'
}
}, {
'Id': '1-0000002',
'attributes': {
'u_fn': 'TestUser2_FirstName',
'u_ln': 'TestUser2_LastName',
'Customer_Type_ID': 'ΦΥΣΙΚΟ',
'u_em': '[email protected]',
'u_mb': '6900000002',
'# of policies': 2,
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000002',
'Receipt_No': '430000002'
}
}
]
Как вы можете видеть, каждая политика_no имеет только последнее значение receipt_no, потому что во время итерации первые полученные значения ( 420000001 и 430000001 ) перезаписаны вторыми ( 4200002 и 4300002 ). должен быть создан новый список, называемый « политики ', и он должен содержать для каждого идентификатора, все политика_no с reffice_no .
[{
'Id': '1-0000001',
'attributes': {
'u_fn': 'TestUser1_FirstName',
'u_ln': 'TestUser1_LastName',
'Customer_Type_ID': 'ΦΥΣΙΚΟ',
'u_em': '[email protected]',
'u_mb': '6900000001',
'# of policies': 2,
'policies details': [{
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000001',
'Receipt_No': '420000001'
}, {
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000001',
'Receipt_No': '420000002'
}
]
}
}, {
'Id': '1-0000002',
'attributes': {
'u_fn': 'TestUser2_FirstName',
'u_ln': 'TestUser2_LastName',
'Customer_Type_ID': 'ΦΥΣΙΚΟ',
'u_em': '[email protected]',
'u_mb': '6900000002',
'# of policies': 2,
'policies details': [{
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000002',
'Receipt_No': '430000001'
}, {
'Company_ID': 2,
'Branch_ID': 5,
'Policy_No': '000000002',
'Receipt_No': '430000002'
}
]
}
}
]
< /code>
для достижения этого результата, начиная с начальной кадры данных, я выполнил следующие шаги: < /p>

Я добавил новый столбец (список словарей), называемый «Подробности политики» < /li>
Я создал новую группу, под названием «Политика». i ["police_no"] '< /li>
< /ol>
df['policies details'] = df[['Company_ID', 'Branch_ID', 'Policy_No', 'Receipt_No']].to_dict(orient='records')

grouped = df.groupby('customer_id').apply(lambda x: x.groupby('Policy_No').apply(lambda y: y.drop(['customer_id', 'Policy_No'], axis=1).to_dict(orient='records'))).reset_index()

grouped.columns = ['customer_id', 'Policy_No', 'attributes'] # Column names for grouped DataFrame

output = grouped.to_dict('records')

results = []

for i in output:
attributes = {}
for j in i["attributes"]:
attributes["u_fn"] = j["u_fn"]
attributes["u_ln"] = j["u_ln"]
attributes["Customer_Type_ID"] = j["Customer_Type_ID"]
attributes["u_em"] = j["u_em"]
attributes["u_mb"] = j["u_mb"]
attributes["# of policies"] = j["# of policies"]
policies_details = []
for k in i["Policy_No"]:
attributes["policies details"] = j["policies details"]

contact = {
"Id": i["customer_id"],
"attributes": attributes
}
results.append(contact)
< /code>
Но опять же, значение результатов не было правильным. Я перезаписал первые значения receipt_no со вторыми. Моя главная проблема заключается в том, что я не знаю, как правильно итерации в существующем «для j in i [" attributes "] и как добавить каждое значение без перезаписи.
Любая помощь будет высоко ценится. < /P>

Подробнее здесь: https://stackoverflow.com/questions/795 ... t-recursiv
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»