Dataframe de Panda de distribución de partículas: agrupar por ID y encontrar el flujo medio y el radio de flujo medio.
Estoy usando el dataframe de Pandas; tengo una distribución de partículas, su distancia desde el centro de la distribución y los flujos asociados. Quiero encontrar el flujo total contenido dentro del “radio del medio flujo” (o “radio de la mitad de la luz”), que es el radio que encierra la mitad del flujo, según la definición. Te pongo un ejemplo y luego te pregunto si tienes alguna idea de cómo hacerlo.
Aquí enumero 2 distribuciones de partículas, identificadas por dist_ID, la distancia de cada partícula desde el centro de la distribución R y el flujo de cada partícula.
dist_ID R flujo
0 702641.0 5.791781 0.097505
1 702641.0 2.806051 0.015750
2 702641.0 3.254907 0.086941
3 702641.0 8.291544 0.081764
4 702641.0 4.901959 0.053561
5 702641.0 8.630691 0.144661
...
228 802663.0 95.685763 0.025735
229 802663.0 116.070396 0.026012
230 802663.0 112.806001 0.022163
231 802663.0 229.388117 0.026154
Por ejemplo, considerando la distribución de partículas con dist_ID=702641.0
, el flujo total de la distribución de partículas es la suma de “flujo”: flujo_total=0.48
;
la mitad del flujo es medio_flujo=flujo_total/2.=0.24
;
el radio que encierra la mitad del flujo es R_2<><r_3
(donde r_2=3.25
de la partícula 2; r_3=8.29
de la partícula 3), por lo que consideraría r_h
como el límite superior de ese intervalo, es decir, r_hf=r_3
.
quiero una forma, agrupando por dist_id
con el dataframe de pandas, de obtener medio_flujo
y r_hf
de cada distribución. gracias. (donde=”” r_2="3.25
” de=”” la=”” partícula=”” 2;=”” r_3="8.29
” de=”” la=”” partícula=”” 3),=”” por=”” lo=”” que=”” consideraría=”” r_h
=”” como=”” el=”” límite=”” superior=”” de=”” ese=”” intervalo,=”” es=”” decir,=”” r_hf="R_3
.” quiero=”” una=”” forma,=”” agrupando=”” por=”” dist_id
=”” con=”” el=”” dataframe=”” de=”” pandas,=”” de=”” obtener=”” medio_flujo
=”” y=”” r_hf
=”” de=”” cada=”” distribución.=””></r_3(donde
r_2=3.25de la partícula 2;
r_3=8.29de la partícula 3), por lo que consideraría
r_hcomo el límite superior de ese intervalo, es decir,
r_hf=r_3`.
quiero una forma, agrupando por dist_id
con el dataframe de pandas, de obtener medio_flujo
y r_hf
de cada distribución. gracias.>
davy.ai
Para resolver este problema, una forma es agrupar el dataframe por
dist_ID
, calcular la suma acumulativa de la columnaflux
y luego encontrar el índice donde la suma acumulativa supera la mitad del flujo total. Una vez que tenemos ese índice, podemos tomar el correspondiente valor deR
como el radio del flujo medio.Aquí hay una forma de hacerlo:
Esto debería darte un dataframe con los valores
half_flux
yR_hf
para cada distribución.Ten en cuenta que esto asume que los datos están ordenados por distancia
R
. Si los datos no están ordenados, deberás ordenarlos primero antes de calcular el flujo acumulativo.