How to sum rows in the same column than the category in pandas dataframe - python
This is also another way
df = pd.DataFrame(dict(a=['Cat. A',1,1,3,'Cat. A',2,2,'Cat. B',3,5,2,6,'Cat. B',1,'Cat. C',4]))
def coerce(x):
try:
int(x)
return np.nan
except:
return x
def safesum(x):
return x[x!=x.iloc[0]].astype(int).sum()
df['b'] = df['a'].apply(coerce).ffill()
df.groupby('b').agg(safesum)
Produces
a
b
Cat. A 9
Cat. B 17
Cat. C 4
We can use pd.to_numeric
to mark non-numeric fields as nan
using Series.mask
and Series.notna
then use for group. Then use GroupBy.sum
a = pd.to_numeric(df['a'], errors='coerce')
g = df['a'].mask(a.notna()).ffill()
a.groupby(g).sum()
Cat. A 9.0
Cat. B 17.0
Cat. C 4.0
Name: a, dtype: float64