- Отфильтровать значения в 1
- Использовать
pd.cut
и bin fi_diameter
- Использовать запрещенные метки для группировки и суммирования на
ever_percent
df = df.query('fi_diameter >= 1')
grouper = pd.cut(
df['fi_diameter'],
bins=[1, 2, 3, 4, 5, 6, 7, 8],
labels=['1-2', '2-3', '3-4', '4-5', '5-6', '6-7', '7-8']
)
df.groupby(grouper).ever_percent.sum().reset_index()
fi_diameter ever_percent
0 1-2 3.70
1 2-3 38.59
2 3-4 37.16
3 4-5 7.23
4 5-6 6.37
5 6-7 2.49
6 7-8 4.46
Вот как вы обобщаете это для любой верхней границы.
mx = int(np.ceil(df['fi_diameter'].max()))
rn = np.arange(1, mx + 1)
df = df.query('fi_diameter >= 1')
grouper = pd.cut(
df['fi_diameter'],
bins=rn,
labels=[
str(i) + '-' + str(j) for i, j in zip(rn, rn[1:])
]
)
df.groupby(grouper).ever_percent.sum().reset_index()
fi_diameter ever_percent
0 1-2 3.70
1 2-3 38.59
2 3-4 37.16
3 4-5 7.23
4 5-6 6.37
5 6-7 2.49
6 7-8 4.46