r1 = Join[{Append[First[data], "Count"]}, Join @@ Values @
GroupBy[Rest @data, First, MapIndexed[Join, #]&]]
{{ID,Value,Count},{1,48,1},{1,45,2},{1,52,3},{1,43,4},{1,41,5},{2,50,1},{2,42,2},{2,51,3},{2,52,4},{bb,52,1},{bb,54,2},{dd,20,1},{dd,25,2},{dd,27,3},{cc,30,1}}
Update 1:
Prepend[Join @@ (MapIndexed[Join, #]&/@ SplitBy[Rest @ data, First]),
Append[First[data], "Count"]]
{{ID,Value,Count},{1,48,1},{1,45,2},{1,52,3},{1,43,4},{1,41,5},{2,50,1},{2,42,2},{2,51,3},{2,52,4},{bb,52,1},{bb,54,2},{dd,20,1},{dd,25,2},{dd,27,3},{cc,30,1}}
Update 2:
addCounter = Module[{countcnt}, count[_String]cnt[_String] := "Count"; count[_]cnt[_] := 1;
Map[{##, count[#]++cnt[#]++} & @@ # &, #,@@@ {-2}]]&;#]&;
addCounter @ data
{{"ID", "Value", "Count"}, {1, 48, 1}, {1, 45, 2}, {1, 52, 3}, {1, 43, 4}, {1, 41, 5}, {2, 50, 1}, {2, 42, 2}, {2, 51, 3}, {2, 52, 4}, {bb, 52, 1}, {bb, 54, 2}, {dd, 20, 1}, {dd, 25, 2}, {dd, 27, 3}, {cc, 30, 1}}