需要根据出现的频率替换熊猫中的值

时间:2018-11-01 19:40:47

标签: python pandas

我的挑战是根据出现的频率为VENDOR ID赋予通用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

左列是供应商ID,右列是出现的频率。 我想保留前5个最频繁出现的供应商ID的供应商ID。对于所有剩余的供应商ID,我想将现有的供应商ID替换为通用的供应商ID 9999。

感谢您提供帮助以完成此任务。

4 个答案:

答案 0 :(得分:1)

.map五个最大的供应商,它们将其余的映射到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')

答案 1 :(得分:0)

这应该为您解决

    runAllManagedModulesForAllRequests="false"

     <system.webServer>
    <defaultDocument>
    <files>
     <clear/>
        <add value="Default.aspx"/>
      </files>
    </defaultDocument>
  </system.webServer>

答案 2 :(得分:0)

尝试:

 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)

答案 3 :(得分:0)

你可以让

i = BaseData.groupby(["VENDOR_ID"]).size().sort_values(ascending=False,na_position='last')[5:]
BaseData[BaseData['VENDOR_ID'].isin(i)] = 9999