* превратить json в ржавчину, pandas взорвать и лямду - PullRequest
1 голос
/ 05 марта 2020

У меня есть 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)

любая помощь будет очень признательна

...