You can buffer your cells to create the coverage areas, then use a spatial join to link each coverage area with the cells it contains.
import geopandas
from shapely.geometry import Point
# create example data
cells = geopandas.GeoDataFrame({
'index': [0,1,2,3],
'pop': [1,2,3,4],
'geometry': [
Point([0,0]),
Point([0,1]),
Point([1,0]),
Point([1,1])
]
}).set_index('index')
# create "coverage" buffers
coverage = cells[['geometry']].copy()
# take care here - your data should be in a projected CRS
# if you want to interpret this as a distance in meters
coverage['geometry'] = coverage.buffer(1.1)
# join cells with coverage, then groupby and sum
cell_coverage_pop = cells.sjoin(coverage, predicate='within') \
.groupby('index_right') \
.sum()
# rename index and column name
cell_coverage_pop.index.rename('index', inplace=True)
cell_coverage_pop.rename(columns={'pop': 'coverage'}, inplace=True)
# cell_coverage_pop has "index" index and "coverage"
# with population total
# join back to original cells if desired
cells = cells.join(cell_coverage_pop)
# cells now has "index" index, and original "pop", original
# "geometry" and total "coverage"