Необходимо заменить значения в пандах в соответствии с частотой возникновения - PullRequest
0 голосов
/ 01 ноября 2018

Моя задача состоит в том, чтобы назначить общий идентификатор VENDOR ID в соответствии с частотой возникновения.

BaseData.groupby(["VENDOR_ID"]).size().sort_values(ascending=False,na_position='last')

возвращает следующее.

VENDOR_ID
1111    5000
1112    4500
1113    4000
1114    3500
1115    3000
1116     880
1117     500
1118     300
1119     200
1120      20

В левом столбце указан идентификатор поставщика, а в правом столбце - частота появления. Я хочу сохранить идентификатор поставщика для первых 5 наиболее часто встречающихся идентификаторов поставщиков. Для всех оставшихся идентификаторов поставщиков я хочу заменить существующие идентификаторы поставщиков на общий идентификатор 9999.

Любая помощь в получении этого приветствуется.

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

.map 5 крупнейших поставщиков, которые сопоставят остальных с NaN, а затем .fillna с общим значением:

df['VENDOR_ID'] = df.VENDOR_ID.map(
                      dict((i, i) for i in df.groupby('VENDOR_ID').size().nlargest(5).index)
                  ).fillna('9999')
0 голосов
/ 01 ноября 2018

Попробуйте:

 vendor_id = [1,2,3,4,5,6,7,8,9]
 frequency = [5000,4000,3000,3500,880,500,400,300,300]

 df = pd.DataFrame({'vendor_id':vendor_id, 'frequency':frequency})
 df = df.sort_values('frequency', ascending=False)
 fifth_frequency = df.iloc[4]['frequency']    


 df['vendor_id'] = df.apply(lambda x: x[0] if x[1]>=fifth_frequency else 9999, axis=1)
0 голосов
/ 01 ноября 2018

Вы могли бы позволить

i = BaseData.groupby(["VENDOR_ID"]).size().sort_values(ascending=False,na_position='last')[5:]
BaseData[BaseData['VENDOR_ID'].isin(i)] = 9999
0 голосов
/ 01 ноября 2018

Это должно исправить это для вас

new = BaseData.groupby(["VENDOR_ID"]).size().sort_values(ascending=False,na_position='last')
new = new.reset_index()
new.iloc[5:, 0] = 9999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...