Python: генерировать словарь из кадра данных pandas со строками в качестве ключей и столбцами в качестве значений
У меня есть датафрейм, который выглядит так:
Curricula Course1 Course2 Course3 ... CourseN
0 q1 c1 c2 NaN NaN
1 q2 c14 c21 c1 Nan
2 q3 c2 c14 NaN Nan
...
M qm c7 c9 c21
Где количество курсов в учебных планах отличается.
Мне нужен словарь из этого фрейма данных, который выглядит так:
{'q1': 'c1', 'q1': 'c2', 'q2': 'c14', 'q2': 'c21', 'q2: 'c1' ... }
Если имена строк являются моими ключами, и для каждой строки словарь заполнен всей информацией "Учебный план": "Курс", за исключением значений "NaN".
До сих пор я пытался установить индекс для столбца "Curricula", перенося фрейм данных и используя методы to_dict (records), но это привело к следующему выводу:
в:
df.set_index('Curricula')
df_transposed = df.transpose()
Dic = df_transposed.to_dict('records')
из:
[{0: 'q1', 1: 'q2', 2: 'q3', ... }, {0: 'c1', 1: 'c14', 2: 'c2' ...} ... {0: NaN, 1: 'c1', 2: 'Nan']
Таким образом, здесь целочисленные значения столбцов используются в качестве ключей вместо требуемых значений столбцов "Учебный план", и, кроме того, значения NaN не исключаются.
У кого-нибудь есть идея, как это исправить?
С наилучшими пожеланиями, Ян
1 ответ
Настроить
df = pd.DataFrame({'Curricula': {0: 'q1', 1: 'q2', 2: 'q3'},
'Course1': {0: 'c1', 1: 'c14', 2: 'c2'},
'Course2': {0: 'c2', 1: 'c21', 2: 'c14'},
'Course3': {0: np.nan, 1: 'c1', 2: np.nan}})
print(df)
Curricula Course1 Course2 Course3
0 q1 c1 c2 NaN
1 q2 c14 c21 c1
2 q3 c2 c14 NaN
Вы не можете иметь дубликаты ключей в словаре, однако вы можете использовать agg
вместе с set_index
а также stack
создать список для каждого уникального ключа:
df.set_index('Curricula').stack().groupby(level=0).agg(list).to_dict()
{'q1': ['c1', 'c2'], 'q2': ['c14', 'c21', 'c1'], 'q3': ['c2', 'c14']}