Назначить метки сопоставления словаря для индексации значений в столбец в pandas

#python #pandas #dictionary #series

#python #pandas #словарь #Серии

Вопрос:

Я хочу использовать словарь ‘cluster1’ для заполнения пустого pandas series вызываемого Cluster .

Для получения некоторой информации о данных:

 data.StringTogeth1
print(type(data.StringTogeth1))
print(type(data.StringTogeth1[0]))
  

Вывод:

     0                      love dog cute think
    1                           dog look weird
    2                  think look like cupacak
    3    want snowman thank jerk grrr make mad
    4        hey know time babi shark dodododo
    5                               dog awesom

    Name: StringTogeth1, dtype: object


<class 'pandas.core.series.Series'>
<class 'str'>
  

Ввод:

 nclusters1 = 4
clusters1 = cluster_sentences(data.StringTogeth1, nclusters1)
data['Cluster'] = pd.Series()


print(clusters1)
  

Вывод:

 {1: [0, 2], 2: [1, 5], 0: [3], 3: [4]}
  

Так clusters1 переводится в

 {cluster number: [index from series,index from series], etc..}
  

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

     Id  StringTogeth1                           Cluster
0   1   love dog cute think                     1
1   2   dog look weird                          2
2   3   think look like cupacak                 1
3   4   want snowman thank jerk grrr make mad   0
4   5   hey know time babi shark dodododo       3
5   6   dog awesom                              2
  

Ответ №1:

IIUC, вы можете сгладить и инвертировать clusters1 , а затем назначить его обратно:

 df['Clusters'] = pd.Series({v: k for k, V in clusters1.items() for v in V})
df

   Id                          StringTogeth1  Clusters
0   0                    love dog cute think         1
1   1                         dog look weird         2
2   2                think look like cupacak         1
3   3  want snowman thank jerk grrr make mad         0
4   4      hey know time babi shark dodododo         3
5   5                             dog awesom         2
  

Где,

 {v: k for k, V in clusters1.items() for v in V}
# {0: 1, 1: 2, 2: 1, 3: 0, 4: 3, 5: 2}
  

…это сопоставление индекса с меткой кластера.

Подсказка: инициализация столбца с пустым рядом не требуется.