У меня есть json файл / объект, который мне нужно преобразовать в ржавчину. Преобразование очень похоже на задание vlookup / map Reduce
input :
{
"region": "minikube",
"streams": {
"stream1": {
"producers": [
"user1",
"user2",
"user3"
],
"consumers": [
"user3",
"user4",
"user2",
"user5"
]
},
"stream2": {
"producers": [
"user3",
"user5",
"user2"
],
"consumers": [
"user1",
"user4"
]
},
"stream3": {
"producers": [],
"consumers": []
}
}
}
result : (csv или json вывод каждого пользователя в столбцах «продюсер» и «потребитель» с соответствующим «потоком», который они могут либо производить, или использовать в зависимости от того, в каком столбце они находятся)
user, produce_to, consume_from
user1, ['stream1'], ['stream2']
user2, ['stream1', 'stream2'], ['stream1']
user3, ['stream1', 'stream2'], ['stream1']
user4, [], ['stream1', 'stream2']
user5, ['stream2'], ['stream1']
эквивалент в pandas python выглядит так:
# consumers
consumers_df = stream[['name', 'consumers']].explode('consumers')
consumers_df = consumers_df.groupby(['consumers']).agg(lambda x: str(x.tolist()))
consumers_df.reset_index(inplace=True)
consumers_df.rename(columns={'consumers':'user', 'name':'consume_from'}, inplace=True)
# producers
producers_df = stream[['name', 'producers']].explode('producers')
producers_df = producers_df.groupby(['producers']).agg(lambda x: str(x.tolist()))
producers_df.reset_index(inplace=True)
producers_df.rename(columns={'producers':'user', 'name':'produce_to'}, inplace=True)
любая помощь будет очень признательна