I think your approach (add attributes storing 1 or 0 that indicates whether the row matches a condition and then sum up them with a StatisticsCalculator) is enough simple. If you want to reduce the number of transformers, consider using an AttributeCreator or AttributeManagure with conditional value setting to create the flag attributes for every condition, rather than using ExpressionEvaluators. You can then set the attributes to the Attributes to Analyze parameter in the StatisticsCalculator.
Alternatively, if you are familiar with SQL syntax, the InlineQuerier with a SQL query that counts the number of rows matching each condition could also be a solution. The SQL query would look like this.
select
(select count(*) from source where <condition 1>) as count1,
(select count(*) from source where <condition 2>) as count2,
...
(select count(*) from source where <condition 10>) as count10
Note: Querying itself would be very fast, but the InlineQuerier takes creates a temporary SQLite database that stores entire source dataset, and it takes a certain time. I'm not sure it would be more efficient than the StatisticsCalculator approach when the number of rows from the CSV table is very large.