Как заменить данные в pandas, используя значения в dict?

#pandas #dataframe #dictionary #replace #series

#pandas #фрейм данных #словарь #заменить #Серии

Вопрос:

У меня есть серия, которая содержит несколько чисел. Я хочу заменить их на данные другого строкового типа, используя значения словаря. Но я не знаю, как это сделать…

 GDP_group['GdpForYearPer$1M'].head(5)
  

0 46.919625
1 47.515189
2 47.737955
3 54.832578
4 56.338028
5 63.101272

Это dict, который я создал для замены данных.

 range_GDP = {'$0 ~ $100M': np.arange(0,100), '$100M ~ $1B': np.arange(100.0000001,1000), '$1B ~ $10B': np.arange(1000.000001, 10000), '$10B ~ $100B': np.arange(10000.000001, 100000),
        '$100B ~ $1T': np.arange(100000.000001, 1000000), '$1T ~': np.arange(1000000.000001, 20000000)}
  

Ответ №1:

Вы можете использовать pd.cut для сегментации ваших данных в диапазонах и применения меток.

(повторно) сгенерировать фиктивные данные, отобранные равномерно в пространстве журнала:

 import numpy as np
import pandas as pd
GdpForYearPer1M = pd.Series(10**np.random.randint(0, 8, 100))

"""
0           1
1        1000
2         100
3          10
4         100
       ...
95    1000000
96        100
97     100000
98      10000
99         10
"""
  

решение:

 # generate "cuts" (bins) and associated labels from `range_GDP`.    

cut_data = [(np.min(v), k) for k, v in range_GDP.items()]
bins, labels = zip(*cut_data)

# bins required to have one more value than labels
bins = list(bins)   [np.inf]
pd.cut(GdpForYearPer1M, bins=bins, labels=labels)
  

вывод:

 0       $0 ~ $100M
1      $100M ~ $1B
2       $0 ~ $100M
3       $0 ~ $100M
4       $0 ~ $100M
          ...
95     $100B ~ $1T
96      $0 ~ $100M
97    $10B ~ $100B
98      $1B ~ $10B
99      $0 ~ $100M
Length: 100, dtype: category
Categories (6, object): [$0 ~ $100M < $100M ~ $1B < $1B ~ $10B < $10B ~ $100B < $100B ~ $1T < $1T ~]