Преобразовать серию в словарь? - PullRequest
1 голос
/ 26 января 2020

У меня есть набор данных, к которому я применил функцию groupby

data.groupby(by=['version','sentiment']).score.count()

вывод:

version  sentiment       
10.1.2   negative        3.0
         positive        8.0
10.2.0   negative        1.0
10.4.2   negative        1.0
10.4.3   negative        1.0
10.4.6   positive        1.0
10.5.1   negative        1.0
10.5.2   positive        1.0
10.5.5   negative        2.0
11.0     negative        1.0
11.2     negative        3.0
         positive        1.0
11.3.1   negative        1.0

Нет, я хочу преобразовать это в словарную форму, где вывод должен быть что-то вроде:

{'10.1.2' : {
      'positive' : 3,
      'negative' : 8
},
'10.2.0' : {
}

1 Ответ

1 голос
/ 26 января 2020

Я думаю, что вам нужно только:

s.unstack().to_dict('index')
#.unstack(level = 0).to_dict()

где s - ваш сер ​​ie

data.groupby(by=['version','sentiment']).score.count().unstack().to_dict()

Я использовал DataFrame для решения вашей проблемы

print(df)
        i1        i2  col
0   10.1.2  negative  3.0
1   10.1.2  positive  8.0
2   10.2.0  negative  1.0
3   10.4.2  negative  1.0
4   10.4.3  negative  1.0
5   10.4.6  positive  1.0
6   10.5.1  negative  1.0
7   10.5.2  positive  1.0
8   10.5.5  negative  2.0
9     11.0  negative  1.0
10    11.2  negative  3.0
11    11.2  positive  1.0
12  11.3.1  negative  1.0


df.set_index(['i1','i2'])['col'].unstack().to_dict('index')
#{'10.1.2': {'negative': 3.0, 'positive': 8.0},
# '10.2.0': {'negative': 1.0, 'positive': nan},
# '10.4.2': {'negative': 1.0, 'positive': nan},
# '10.4.3': {'negative': 1.0, 'positive': nan},
# '10.4.6': {'negative': nan, 'positive': 1.0},
# '10.5.1': {'negative': 1.0, 'positive': nan},
# '10.5.2': {'negative': nan, 'positive': 1.0},
# '10.5.5': {'negative': 2.0, 'positive': nan},
# '11.0': {'negative': 1.0, 'positive': nan},
# '11.2': {'negative': 3.0, 'positive': 1.0},
# '11.3.1': {'negative': 1.0, 'positive': nan}}
...