根据字典中数字范围的熊猫地图列

时间:2018-08-21 21:04:13

标签: python pandas

输入数据框:

  file_id       filename
  30140       WS52RN-300-7750460312963...
  30730       DMX5N4H-336-7G5082A_15089528977...
  31215       114-403CBC_1508935183409.mp4
  32000       VQCYSR-300-84L7F5D9_1508937725363...
  32648       69HM-336-6262906_48508952353171.mp4

词典:

h={28: [30138, 30636], 29: [30637, 31117], 30: [31118, 31616], 31: [31617, 32115], 32: [32151, 32649]}

我需要根据上述命令创建列file_num。 如果file_id在value范围之间,则密钥变为file_num

预期输出:

  file_id       filename                                  file_num
  30140       WS52RN-300-7750460312963...                  28
  30141       DMX5N4H-336-7G5082A_15089528977...           28
  31215       114-403CBC_1508935183409.mp4                 30
  32000       VQCYSR-300-84L7F5D9_1508937725363...         31
  32648       69HM-336-6262906_48508952353171.mp4          32

我正在尝试将地图与h结合使用,但没有得到所需的结果。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

使用IntervalIndex

matchdf=pd.DataFrame.from_dict(h,'index').reset_index()
matchdf.index=pd.IntervalIndex.from_arrays(left=matchdf[0],right=matchdf[1],closed= 'both')
df['New']=matchdf.loc[df.file_id]['index'].values
df
Out[128]: 
   file_id                              filename  New
0    30140           WS52RN-300-7750460312963...   28
1    30730    DMX5N4H-336-7G5082A_15089528977...   29
2    31215          114-403CBC_1508935183409.mp4   30
3    32000  VQCYSR-300-84L7F5D9_1508937725363...   31
4    32648   69HM-336-6262906_48508952353171.mp4   32