Добавить внутренний 0 и 1-й индекс ко всем элементам 2-го индекса двумерного списка списков - python - PullRequest
0 голосов
/ 02 марта 2020

Здравствуйте, новичок в python здесь ... интересно, как лучше решить проблему, подобную этой.

У меня есть двумерный массив, который выглядит примерно так:

a = [['October 17', 'Manhattan', '10024, 10025, 10026'], 
     ['October 17', 'Queen', '11360, 11362, 11365, 11368']]

Хотелось бы повторить это, чтобы создать новый список или фрейм данных, который выглядит следующим образом:

10024, October 17, Manhattan
10025, October 17, Manhattan
10026, October 17, Manhattan
11360, October 17, Queens
11362, October 17, Queens
11365, October 17, Queens
11368, October 17, Queens

Любое понимание будет с благодарностью.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

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

values = [['October 17', 'Manhattan', '10024, 10025, 10026'],
          ['October 17', 'Queens', '11360, 11362, 11365, 11368']]

result = [[int(idx), row[0], row[1]]
          for row in values
          for idx in row[2].split(',')]
df = DataFrame(result, columns=['idx', 'date', 'place'])

Для получения

[[10024, 'October 17', 'Manhattan'], [10025, 'October 17', 'Manhattan'], 
 [10026, 'October 17', 'Manhattan'], [11360, 'October 17', 'Queens'], 
 [11362, 'October 17', 'Queens'], [11365, 'October 17', 'Queens'], 
 [11368, 'October 17', 'Queens']]


     idx        date      place
0  10024  October 17  Manhattan
1  10025  October 17  Manhattan
2  10026  October 17  Manhattan
3  11360  October 17     Queens
4  11362  October 17     Queens
5  11365  October 17     Queens
6  11368  October 17     Queens
0 голосов
/ 03 марта 2020

Ответ Azro великолепен, но вот способ решения этой проблемы, который является более явным (если вы действительно новичок в Python, этот подход может быть более ясным, чтобы вы могли понять, что происходит - это не так полагаться на понимание вложенного списка.)

a = [['October 17', 'Manhattan', '10024, 10025, 10026'], 
['October 17', 'Queen', '11360, 11362, 11365, 11368']]

# initialize an empty list to put our reformatted data into
final_result = []

for inner_list in a:
    # get the first two items
    first_item = inner_list[0]
    second_item = inner_list[1]

    # split the third list item, and remove trailing and leading whitespace
    remaining_data = [x.strip() for x in inner_list[2].split(',')]

    # iterate over the remaining data
    for item in remaining_data:
        # first, create a new sublist containing our first two items
        new_entry = [item, first_item, second_item]

        # add our new_entry into the final result list
        final_result.append(new_entry)

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