Получить правильную последовательность элементов
Имеется датафрейм следующего вида:
q = [['table 2', 'C'],
['table 2', 'D'],
['table 3', 'C'],
['table 6', 'C'],
[nan, nan],
['table 2', 'B'],
['table 3', 'B'],
['table 6', 'B'],
[nan, nan],
['table 4', 'C5'],
['table 4', 'C6'],
[nan, nan],
['table 42', 'C'],
['table 43', 'C'],
[nan, nan],
['table 4', 'B5'],
['table 4', 'B6'],
[nan, nan],
['table 42', 'B'],
['table 43', 'B']]
Названия колонок:
columns = ['source', 'own']
Необходимо получить следующую последовательность элементов (пока не знаю, какая структура данных лучше всего подойдет)
dict1 = {'2': ['C', 'D'],
'3': ['C'],
'6': ['C'],
'2': ['B'],
'3': ['B'],
'6': ['B'],
'4': ['C5', 'C6'],
'42': ['C'],
'43': ['C'],
'4': ['B5', 'B6'],
'42': ['B'],
'43': ['B']
}
То есть необходимо сохранить текущую последовательность первых элементов списков из списка q. Знаю, что в словаре нельзя иметь одинаковые ключи, поэтому пока не могу понять, какая структура лучше подойдет.
Есть решение из моего предыдущего вопроса
def get_correct_column_order(data_schema):
mask = data_schema['source'].isnull() & (data_schema['source'].ffill() == data_schema['source'].bfill())
data_schema.loc[mask, 'source'] = data_schema['source'].ffill().loc[mask]
data_schema['own'].fillna('', inplace=True)
correct_column_order = data_schema.groupby('source', sort=False).agg(list)['own'].to_dict()
return correct_column_order
df = pd.DataFrame(q, columns=columns)
get_correct_column_order(df)
И такое решение выдает следующий результат, который мне не подходит
dict2 = {'2': ['C', 'D', 'B'],
'3': ['C', 'B'],
'6': ['C', 'B'],
'4': ['C5', 'C6', 'B5', 'B6'],
'42': ['C', 'B'],
'43': ['C', 'B'],
}
Источник: Stack Overflow на русском