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']}   
Другие вопросы по тегам