Перебор двух списков панд - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над тем, чтобы очистить часть своего кода, чтобы сделать его немного более питоническим, но мне интересно, можно ли написать ниже более приятный способ, например, методом itertools или pandas.Приведенный ниже код работает, однако я надеюсь удалить двойной цикл for и объединить немного кода по соображениям производительности.

В конечном счете, я работаю со списком индексов, которые вызывают столбец Панд.

def foo(dataset):
  api_reshaped = pd.DataFrame(columns=['foo', 'bar'])
  k = 0

  for index, _ in dataset.iterrows():
    for key in dataset.iloc[index][0][0]:
      api_reshaped.loc[k, 'foo'] = key
      api_reshaped.loc[k, 'bar'] = dataset.iloc[index][0][0][key]
      k += 1
  return api_reshaped

Ниже приведен ожидаемый ввод / вывод от этой функции:

 foo_input = pd.dataframe({
      'batch_data': [{'foo_query': [{'bar_query': 'data'}]}],
      'query_spell': ['foo']
    })

print foo_input(foo_input)
# expected_output = pd.dataframe({
#  'foo': 'foo_query',
#  'bar': [{'bar_query': 'data'}]
# })

Большое спасибо!

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать понимание списка с помощью transpose:

# your input data
foo_input = pd.DataFrame({
  'batch_data': [{'foo_query': [{'bar_query': 'data'}]}],
  'query_spell': ['foo']
})

# use list comprehension with transpose
df = pd.DataFrame([item for item in foo_input['batch_data']]).T.reset_index()

# rename your columns
df.columns = ['Foo', 'Bar']

      Foo              Bar
0   foo_query   [{'bar_query': 'data'}]

Вы можете использовать applymap с лямбда-функцией, если вы хотите удалить список и просто указать dict

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...