Unnest DataFrame List - PullRequest
       4

Unnest DataFrame List

0 голосов
/ 21 апреля 2020

У меня есть pandas фрейм данных со столбцом, содержащим данные, вложенные следующим образом:

1-я строка: [('QT', 0, 2, 'PERSON'), ('Billionaire Jack Ma', 102, 121, 'PERSON'), ('$14 million', 131, 142, 'MONEY'), ('U.S.', 204, 208, 'GPE'), ('33', 226, 228, 'MONEY')]

2-я строка: [('My PhD Mol', 61, 73, 'PERSON'), ('4', 151, 152, 'CARDINAL'), ('100%', 194, 198, 'PERCENT')]

Мне нужно развернуть каждую группу из 4 в 4 отдельных столбца, сохранив исходный индекс строки в качестве идентифицирующей переменной.

Идеальный результат:

enter image description here

Возможно ли это?

Заранее спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Я не знаю о производительности, но если бы я хорошо понял вашу проблему, это бы сработало:

result_df = pd.DataFrame(data={'org_id': [idx_val for idx_val in org_df.index for i in range(len(org_df.loc[idx_val, 'target_col']))], 
                     'col_1': [single_tuple[1] for row_value in org_df['target_col'] for single_tuple in row_value], 
                     'col_2': [single_tuple[1] for row_value in org_df['target_col'] for single_tuple in row_value],
                     'col_3': [single_tuple[2] for row_value in org_df['target_col'] for single_tuple in row_value], 
                     'col_4': [single_tuple[3] for row_value in org_df['target_col'] for single_tuple in row_value]})

РЕДАКТИРОВАТЬ : версия с лучшей производительностью, избегает повторения понимания:

data = {}
# For each index value, repeat n = len(row_list) times
data['org_id'] = [idx_val for idx_val in org_df.index for i in range(len(org_df.loc[idx_val, 'target_col']))]
# Extract each value of each tuple in a specific column
data['col_1'], data['col_2'], data['col_3'], data['col_4'] = zip(*[single_tuple for row_value in org_df['target_col'] for single_tuple in row_value])
result_df = pd.DataFrame(data=data)
...