Код: Выделить всё
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'
}
}
]
[{
'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