[英]Group already binned data into different bins in Python
我有在某些箱中給出的數據:
0 T<=-25
1619 -25<T<=-10
98391 -10<T<=0
698588 0<T<=15
782997 15<T<=20
數據框看起來像:
value | T_min | T_max
-----------------------
0 | | -25
1619 | -25 | -10
98391 | -10 | 0
698588 | 0 | 15
782997 | 15 | 20
我想將這些分箱值分配給新的分箱。 新的界限是:
T<-14
-14<T<=-12
-12<T<=-10
-10<T<=-8
-8<T<=-6
-6<T<=-4
-4<T<=-2
-2<T<=0
0<T<=2
2<T<=4
4<T<=6
6<T<=8
8<T<=10
10<T<=12
12<T<=14
14<T<=16
16<T<=18
18<T<=20
T>22
因此,這些值必須在新的 bin 上平均分配或按百分比分配。 有沒有辦法在 Pandas 中做到這一點? 你有什么提示嗎?
這是我到目前為止所做的:
import pandas as pd
bb_temp = [-14 + i*2 for i in range( 0, 35 ) ]
d = {'val': [0, 1619, 98391, 698588, 782997, 308393, 131402, 16319, 899, 0, 0, 0, 0, 0 ], 'T_min': [ 0,-25,-10,0,10,20,25,30,35,40,45,50,55,60 ], 'T_max': [-25,-10,0,10,20,25,30,35,40,45,50,55,60,0 ]}
df = pd.DataFrame(data=d)
def f(row):
bb = [ i for i in bb_temp if i > row[ "T_min" ] and i <= row[ "T_max" ] ]
if len( bb ) == 0:
bb = [0]
new_bin_val = row[ "val" ] / len(bb)
return ( bb, new_bin_val )
df[ 'new_bin' ] = df.apply( f, axis=1 )
df
val T_min T_max new_bin
0 0 0 -25 ([0], 0.0)
1 1619 -25 -10 ([-14, -12, -10], 539.6666666666666)
2 98391 -10 0 ([-8, -6, -4, -2, 0], 19678.2)
3 698588 0 10 ([2, 4, 6, 8, 10], 139717.6)
4 782997 10 20 ([12, 14, 16, 18, 20], 156599.4)
5 308393 20 25 ([22, 24], 154196.5)
6 131402 25 30 ([26, 28, 30], 43800.666666666664)
7 16319 30 35 ([32, 34], 8159.5)
8 899 35 40 ([36, 38, 40], 299.6666666666667)
9 0 40 45 ([42, 44], 0.0)
10 0 45 50 ([46, 48, 50], 0.0)
11 0 50 55 ([52, 54], 0.0)
12 0 55 60 ([0], 0.0)
13 0 60 0 ([0], 0.0)
不確定它是否是完成您想要的最有效方法,但這是我通常做的:
def f(x):
# range T < -14
if x < -14:
# return value for corresponding bin
# range -14 < T < -12
if x < -12:
# return value for corresponding bin
# etc...
df['bin_value'] = df['T'].apply(f)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.