Cities in the Southern Hemisphere similar to Chicago average monthly temperature, seasonally adjusted, over a ten year history:
shp = Take[Select[rankedAll, CountryData[CityData[#, "Country"], "SouthernHemisphere"] &], 10]
{Entity["City", {"Bariloche", "RioNegro", "Argentina"}],
Entity["City", {"Canberra", "AustralianCapitalTerritory", "Australia"}],
Entity["City", {"Tandil", "BuenosAires", "Argentina"}],
Entity["City", {"Talca", "Maule", "Chile"}],
Entity["City", {"ComodoroRivadavia", "Chubut", "Argentina"}],
Entity["City", {"Neuquen", "Neuquen", "Argentina"}],
Entity["City", {"Christchurch", "Canterbury", "NewZealand"}],
Entity["City", {"Osorno", "LosLagos", "Chile"}],
Entity["City", {"Valdivia", "LosRios", "Chile"}],
Entity["City", {"MarDelPlata", "BuenosAires", "Argentina"}]}
GeoGraphics[{Red, PointSize[Large],
Tooltip[Point[Reverse[CityData[#, "Coordinates"]]],
CityData[#, "Name"]] & /@ shp},
GeoRange -> "World"]

rankedAll is the collection of all "Large" cities for each Country sorted by deviation of mean temperatures from "Chicago". The approach starts with a TimeSeries documentation example, but then I tear it apart and just go back to some of my old tricks.
cityMeanVal[city_] := cityMeanVal[city] = cityMeanVal[city, 10]
cityMeanVal[city_, yearsago_Integer] :=
cityMeanVal[city, yearsago] =
Module[{year = DateValue["Year"], hist, norm, gather, smooth},
hist =
WeatherData[city,
"MeanTemperature", {{(year - 1) - yearsago, 1, 1, 0, 0,
0.`}, {year, 1, 1, 0, 0, 0.`}, "Month"}];
If[Head[hist] === WeatherData, Null,
norm = Normal[hist];
gather = GatherBy[norm, DateString[First[#], "Month"] &];
smooth = {#[[-1, 1]], Mean[#[[All, 2]]]} & /@ gather;
QuantityMagnitude[smooth[[All, 2]]]
]]
tempMinModel[city_][tocity_] := tempMinModel[city, tocity]
tempMinModel[city_, tocity_] :=
Module[{meantemp0 = cityMeanVal[city],
meantemp = cityMeanVal[tocity]},
If[meantemp === Null || meantemp0 === Null, Null,
Min[Table[Total[(meantemp0 - RotateRight[meantemp, r])^2]/(12 - 1),{r, -6, 6}]
]]]
largeCitiesAll =
Join @@ (CityData[{Large, CanonicalName@#}] & /@ CountryData[]);
rankedAll = SortBy[largeCitiesAll, tempMinModel["Chicago"]];