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"]];