问题
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