How to compare numerical values to categorical ranges in column headers in pandas?

被刻印的时光 ゝ 提交于 2021-02-10 14:32:20

问题


I have one dataframe that looks like this:

import pandas as pd
import datetime

df1 = pd.DataFrame.from_dict(
{'Unnamed: 4': {0: 'Values'},
 datetime.datetime(2021, 1, 1, 0, 0): {0: 8},
 datetime.datetime(2021, 1, 2, 0, 0): {0: 12},
 datetime.datetime(2021, 1, 3, 0, 0): {0: 99},
 datetime.datetime(2021, 1, 4, 0, 0): {0: 25},
 datetime.datetime(2021, 1, 5, 0, 0): {0: 35}}
)

and a second dataframe that looks like this

    df2 = pd.DataFrame.from_dict(
    {'Level': {0: 'Range',
  1: 'Middle point',
  2: 'Total available',
  3: nan,
  4: 1,
  5: 2,
  6: 3,
  7: 4,
  8: 5,
  9: 6,
  10: 7,
  11: 8,
  12: 9,
  13: 10,
  14: 11,
  15: 12,
  16: 13,
  17: 14,
  18: 15,
  19: 16,
  20: 17,
  21: 18,
  22: 19,
  23: 20,
  24: 21,
  25: 22,
  26: 23,
  27: 24,
  28: 25,
  29: 26,
  30: 27},
 1: {0: '1 to 10',
  1: 5,
  2: 17.5,
  3: nan,
  4: nan,
  5: nan,
  6: 8,
  7: nan,
  8: nan,
  9: nan,
  10: nan,
  11: nan,
  12: 1,
  13: 1,
  14: nan,
  15: nan,
  16: nan,
  17: nan,
  18: 1,
  19: 1,
  20: nan,
  21: nan,
  22: 0.5,
  23: nan,
  24: 1,
  25: 1,
  26: 1,
  27: nan,
  28: nan,
  29: 1,
  30: 1},
 11: {0: '11 to 20',
  1: 15,
  2: 24.5,
  3: nan,
  4: nan,
  5: nan,
  6: 15,
  7: nan,
  8: nan,
  9: nan,
  10: nan,
  11: nan,
  12: 1,
  13: 1,
  14: nan,
  15: nan,
  16: nan,
  17: nan,
  18: 1,
  19: 1,
  20: nan,
  21: nan,
  22: 0.5,
  23: nan,
  24: 1,
  25: 1,
  26: 1,
  27: nan,
  28: nan,
  29: 1,
  30: 1},
 21: {0: '21 to 30',
  1: 25,
  2: 34.5,
  3: nan,
  4: nan,
  5: nan,
  6: 25,
  7: nan,
  8: nan,
  9: nan,
  10: nan,
  11: nan,
  12: 1,
  13: 1,
  14: nan,
  15: nan,
  16: nan,
  17: nan,
  18: 1,
  19: 1,
  20: nan,
  21: nan,
  22: 0.5,
  23: nan,
  24: 1,
  25: 1,
  26: 1,
  27: nan,
  28: nan,
  29: 1,
  30: 1},
 31: {0: '31 to 40',
  1: 35,
  2: 46.5,
  3: nan,
  4: nan,
  5: nan,
  6: 37,
  7: nan,
  8: nan,
  9: nan,
  10: nan,
  11: nan,
  12: 1,
  13: 1,
  14: nan,
  15: nan,
  16: nan,
  17: nan,
  18: 1,
  19: 1,
  20: nan,
  21: nan,
  22: 0.5,
  23: nan,
  24: 1,
  25: 1,
  26: 1,
  27: nan,
  28: nan,
  29: 1,
  30: 1},
 41: {0: '41 to 50',
  1: 45,
  2: 53.5,
  3: nan,
  4: nan,
  5: nan,
  6: 44,
  7: nan,
  8: nan,
  9: nan,
  10: nan,
  11: nan,
  12: 1,
  13: 1,
  14: nan,
  15: nan,
  16: nan,
  17: nan,
  18: 1,
  19: 1,
  20: nan,
  21: nan,
  22: 0.5,
  23: nan,
  24: 1,
  25: 1,
  26: 1,
  27: nan,
  28: nan,
  29: 1,
  30: 1}}
    )

How can I compare 1 to 10 ranges with 8, these record are for full month and range values can go upto 10000 with bin size of 10.

How can I get it to compare with my values row, One thing I didn't mentioned before, the bins are not constant e.g. upto 200 bin size is 10 then change to 50

EDIT df1 contains values according to the dates df2 contains ranges I need to compare these values in df with the ranges in df2 , e.g. on jan-01 value is 8 and it falls in range 1-10. so now I need a final df which has all the values under this range for index 1-30 and final df looks like this

final output

output = pd.DataFrame.from_dict(
{'Date': {0: 'Values',
  1: 1,
  2: 2,
  3: 3,
  4: 4,
  5: 5,
  6: 6,
  7: 7,
  8: 8,
  9: 9,
  10: 10},
 datetime.datetime(2021, 1, 1, 0, 0): {0: 8.0,
  1: nan,
  2: nan,
  3: 8.0,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
  8: nan,
  9: 1.0,
  10: 1.0},
 datetime.datetime(2021, 1, 2, 0, 0): {0: 12.0,
  1: nan,
  2: nan,
  3: 15.0,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
  8: nan,
  9: 1.0,
  10: 1.0},
 datetime.datetime(2021, 1, 3, 0, 0): {0: 39.0,
  1: nan,
  2: nan,
  3: 25.0,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
  8: nan,
  9: 1.0,
  10: 1.0},
 datetime.datetime(2021, 1, 4, 0, 0): {0: 25.0,
  1: nan,
  2: nan,
  3: 37.0,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
  8: nan,
  9: 1.0,
  10: 1.0},
 datetime.datetime(2021, 1, 5, 0, 0): {0: 35.0,
  1: nan,
  2: nan,
  3: 44.0,
  4: nan,
  5: nan,
  6: nan,
  7: nan,
  8: nan,
  9: 1.0,
  10: 1.0}}
)

来源:https://stackoverflow.com/questions/66079707/how-to-compare-numerical-values-to-categorical-ranges-in-column-headers-in-panda

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!