Following @J.M. if you are after the likelihood of icy days as a function of month
ff[x_] := Select[cityTemp, #[[1, 2]] == x &] // (Count[#, {d_List, t_?Negative}]/Length[#]) &
{Range[12] - 1/2, ff /@ Range[12]} // Transpose //
ListLinePlot[#, InterpolationOrder -> 0,AxesLabel -> {"Month", "likelihood"}] &
which suggests in January its about 15% (from where I live) and 60 % in Stockholm (Brrr...)

Comparing Paris to Stockholm (using the nice package autoLegend)
ff[x_, temp_] := Select[temp, #[[1, 2]] == x &] // (Count[#, {d_List, t_?Negative}]/
Length[#]) &
{{Range[12] - 1/2, ff[#, cityTempS] & /@ Range[12]} // Transpose,
{Range[12] - 1/2, ff[#, cityTempP] & /@ Range[12]} // Transpose} //
ListLinePlot[#, InterpolationOrder -> 0,
AxesLabel -> {"Month", "likelihood"}] &//autoLegend[#, {"Stockholm","Paris"}] &

Stealing yet again another suggestion of @J.M. we can look at global warming ;-)
This time we look at the faction of days with ice as a function of year:
dat = Map[Count[#, {d_List, t_?Negative}]/Length[#] &,
SplitBy[cityTempP, {#[[1, 1]] &, #[[1, 2]] &}], {2}] // Rest;
fP = LinearModelFit[Mean /@ dat, {1, x}, x];
dat = Map[Count[#, {d_List, t_?Negative}]/Length[#] &,
SplitBy[cityTempS, {#[[1, 1]] &, #[[1, 2]] &}], {2}] // Rest;
fS = LinearModelFit[Mean /@ dat, {1, x}, x];
Show[Plot[{fS[x], fP[x]}, {x, 1, 31}, AxesLabel -> {"year", "Likelihood"}],
ListPlot[{fS["Data"], fP["Data"]}]]// autoLegend[#, {"Stockholm", "Paris"}] &

And finally for the sake of contributing something original (the code for FilledErrorPlot), let us launch the climate-skeptic versus climato-believer debate while illustrating the famous Lies, damned lies, and statistics methodology on two different ways of plotting the same data; guess which is which ;-)
Show[dat // Transpose // FilledErrorPlot[#] &,
Plot[{fS[x]}, {x, 1, 33},
PlotStyle -> Directive[AbsoluteThickness[2], ColorData[10][1]],
AxesLabel -> {"year", "Likelihood"}], AspectRatio -> 1.5,
PlotRange -> {0.035, 0.45}, AxesOrigin -> {0., 0.035},
AxesLabel -> {"year", "Fraction of \n icy days"}]

versus
Show[dat // Transpose // FilledErrorPlot[#, ErrorOnMean -> False] &,
Plot[{fS[x]}, {x, 1, 33},
PlotStyle -> Directive[AbsoluteThickness[2], ColorData[10][1]],
AxesLabel -> {"year", "Likelihood"}], AspectRatio -> 0.5, PlotRange -> {-0.5, 1},
AxesLabel -> {"year", "Fraction of \n icy days"}]

Count[]? – J. M.♦ Oct 14 '12 at 12:29Count[cityTemp, {d_List, t_?Negative}]? BTW, you might also be interested in the functionsSplit[]/SplitBy[]. – J. M.♦ Oct 14 '12 at 12:39+7 Cthe rubber of summer tires is too hard and winter tires are recommended ;-) – halirutan Oct 14 '12 at 15:17