<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _gti_dirint_gte_90_kt_prime(aoi, solar_zenith, solar_azimuth, times, kt_prime):
 """ Determine kt' values to be used in GTI-DIRINT AOI >= 90 deg case. See Marion 2015 Section 2.2. For AOI >= 90 deg: average of the kt_prime values for 65 < AOI < 80 in each day's morning and afternoon. Morning and afternoon are treated separately. For AOI < 90 deg: NaN. See gti_dirint signature for parameter details. Returns ------- kt_prime_gte_90 : Series Index is `times`. """

    # kt_prime values from DIRINT calculation for AOI < 90 case
    # set the kt_prime from sunrise to AOI=90 to be equal to
    # the kt_prime for 65 < AOI < 80 during the morning.
    # similar for the afternoon. repeat for every day.
    aoi_gte_90 = aoi >= 90
    aoi_65_80 = (aoi > 65) & (aoi < 80)
    zenith_lt_90 = solar_zenith < 90
    morning = solar_azimuth < 180
    afternoon = solar_azimuth > 180
    aoi_65_80_morning = aoi_65_80 & morning
    aoi_65_80_afternoon = aoi_65_80 & afternoon
    zenith_lt_90_aoi_gte_90_morning = zenith_lt_90 & aoi_gte_90 & morning
    zenith_lt_90_aoi_gte_90_afternoon = zenith_lt_90 & aoi_gte_90 & afternoon

    kt_prime_gte_90 = []
    for date, data in kt_prime.groupby(times.date):
        kt_prime_am_avg = data[aoi_65_80_morning].mean()
        kt_prime_pm_avg = data[aoi_65_80_afternoon].mean()

        kt_prime_by_date = pd.Series(np.nan, index=data.index)
        kt_prime_by_date[zenith_lt_90_aoi_gte_90_morning] = kt_prime_am_avg
        kt_prime_by_date[zenith_lt_90_aoi_gte_90_afternoon] = kt_prime_pm_avg
        kt_prime_gte_90.append(kt_prime_by_date)
    kt_prime_gte_90 = pd.concat(kt_prime_gte_90)

    return kt_prime_gte_90