从Lower
和Upper
列创建IntervalIndex.from_arrays
的想法。然后通过DataFrame.stack
重塑第一和第二个DataFrame,并首先使用cut
进行合并,用于sum
聚合的组:
df3.index = pd.IntervalIndex.from_arrays(df3['Lower'],df3['Upper'],closed='left')
print (df3.index)
IntervalIndex([[0,5),[5,10),[10,15),[15,20),[20,25),[25,30)],closed='left',dtype='interval[int64]')
df3['Val'] = df2.stack().groupby(pd.cut(df1.stack(),df3.index)).sum()
print (df3)
Lower Upper Val
[0,5) 0 5 73
[5,10) 5 10 13
[10,15) 10 15 132
[15,20) 15 20 108
[20,25) 20 25 90
[25,30) 25 30 65
最后创建默认索引:
df3 = df3.reset_index(drop=True)
print (df3)
Lower Upper Val
0 0 5 73
1 5 10 13
2 10 15 132
3 15 20 108
4 20 25 90
5 25 30 65
详细信息:
print (df1.stack())
1 1 5
2 2
3 3
4 14
2 1 20
2 18
3 12
4 16
3 1 13
2 21
3 32
4 4
4 1 17
2 25
3 32
4 13
dtype: int64
print (pd.cut(df1.stack(),df3.index))
1 1 [5.0,10.0)
2 [0.0,5.0)
3 [0.0,5.0)
4 [10.0,15.0)
2 1 [20.0,25.0)
2 [15.0,20.0)
3 [10.0,15.0)
4 [15.0,20.0)
3 1 [10.0,15.0)
2 [20.0,25.0)
3 NaN
4 [0.0,5.0)
4 1 [15.0,20.0)
2 [25.0,30.0)
3 NaN
4 [10.0,15.0)
dtype: category
Categories (6,interval[int64]): [[0,5) < [5,10) < [10,15) < [15,20) < [20,25) < [25,30)]
print (df2.stack())
1 1 13
2 19
3 45
4 56
2 1 45
2 54
3 28
4 31
3 1 33
2 45
3 32
4 9
4 1 23
2 65
3 14
4 15
dtype: int64
本文链接:https://www.f2er.com/3145120.html