Convert values to integers and then to strings, last join together:
s = df['Quantity'].astype(int).astype(str)
df['buckets'] = s + '-' + s + '.99'
Alternative with f-string
s:
df['buckets'] = [f'{int(x)}-{int(x)}.99' for x in df['Quantity']]
#https://stackoverflow.com/a/42834054
df['buckets'] = [f'{x:.0f}-{x:.0f}.99' for x in df['Quantity']]
print (df)
ID Quantity buckets
0 1 0.45 0-0.99
1 2 1.20 1-1.99
2 3 3.40 3-3.99
3 4 3.00 3-3.99
4 5 23.34 23-23.99
5 6 122.34 122-122.99
If want intervals:
s = df['Quantity'].astype(int)
df['buckets'] = pd.IntervalIndex.from_arrays(s, s + .99)
print (df)
ID Quantity buckets
0 1 0.45 (0.0, 0.99]
1 2 1.20 (1.0, 1.99]
2 3 3.40 (3.0, 3.99]
3 4 3.00 (3.0, 3.99]
4 5 23.34 (23.0, 23.99]
5 6 122.34 (122.0, 122.99]
Detail:
print (df['Quantity'].astype(int))
0 0
1 1
2 3
3 3
4 23
5 122
Name: Quantity, dtype: int32
print (df['Quantity'].astype(int).astype(str))
0 0
1 1
2 3
3 3
4 23
5 122
Name: Quantity, dtype: object