I'm attempting to introduce diversity into my result values, yet I encounter challenges as they consistently yield NA values or remain constant across all sentences. This presents an issue in achieving the desired variability in the outcomes. I am currently exploring potential solutions or adjustments to enhance the variation in the results for a more comprehensive and representative analysis
This is my soil values
def create_soil_profile(index): rowsolo5 = df_camadas_solo5.loc[index] row = argila_geodf.loc[index] rowsolo15 = df_camadas_solo15.loc[index] rowsolo30 = df_camadas_solo30.loc[index] rowsolo60 = df_camadas_solo60.loc[index] rowsolo100 = df_camadas_solo100.loc[index] soilprofile = SoilProfile( pars={'SALB': albedo, # Albedo'SLU1': 6, # Stage 1 Evaporation (mm)'SLPF': 0.8 # Soil fertility factor } ) soilprofile.n_layers = 10 soilprofile.total_depth = 100 soilprofile.site = 'Douradina' soilprofile.country = 'MS_Brazil' soilprofile.lat = dfxy['x'].iloc[index] # Use 'iloc' to access individual values by index soilprofile.lon = dfxy['y'].iloc[index] # Use 'iloc' to access individual values by index for layer_index in range(soilprofile.n_layers): layers = [ SoilLayer(10, {'SLCL': row['SLCL'], 'SLSI': (0.15 * row['SLCL']),'SLOC': rowsolo5['SLOC'],'SCEC': rowsolo5['SCEC'], 'SBDM': rowsolo5['Bdod'],'SLLL': rowsolo5['PMP'],'SSAT': rowsolo5['AD'],'SDUL': rowsolo5['CC'] ,'SSKS': rowsolo5['ksat'], 'SRGF': 1}), SoilLayer(20, {'SLCL': row['SLCL'], 'SLSI': (0.15 * row['SLCL']),'SLOC': rowsolo15['SLOC'],'SCEC': rowsolo15['SCEC'], 'SBDM': rowsolo15['Bdod'],'SLLL': rowsolo15['PMP'], 'SSAT': rowsolo15['AD'],'SDUL': rowsolo15['CC'],'SSKS': rowsolo5['ksat'], 'SRGF': 1}), SoilLayer(30, {'SLCL': row['SLCL'], 'SLSI': (0.15 * row['SLCL']),'SLOC': rowsolo30['SLOC'],'SCEC': rowsolo30['SCEC'], 'SBDM': rowsolo30['Bdod'],'SLLL': rowsolo30['PMP'], 'SSAT': rowsolo30['AD'],'SDUL': rowsolo30['CC'],'SSKS': rowsolo30['ksat'], 'SRGF': 0.42 }), SoilLayer(40, {'SLCL': row['SLCL'], 'SLSI': (0.15 * row['SLCL']), 'SLOC': rowsolo30['SLOC'],'SCEC': rowsolo30['SCEC'], 'SBDM': rowsolo30['Bdod'], 'SLLL': rowsolo30['PMP'],'SSAT': rowsolo30['AD'], 'SDUL': rowsolo30['CC'], 'SSKS': rowsolo5['ksat'], 'SRGF': 0.34}), SoilLayer(50, {'SLCL': rowsolo30['Clay'], 'SLSI': rowsolo30['Silt'], 'SLOC': rowsolo30['SLOC'],'SCEC': rowsolo30['SCEC'], 'SBDM': rowsolo30['Bdod'], 'SLLL': rowsolo30['PMP'],'SSAT': rowsolo30['AD'], 'SDUL': rowsolo30['CC'], 'SSKS': rowsolo5['ksat'], 'SRGF': 0.23}), SoilLayer(60, {'SLCL': rowsolo60['Clay'], 'SLSI': rowsolo60['Silt'],'SLOC': rowsolo60['SLOC'],'SCEC': rowsolo60['SCEC'], 'SBDM': rowsolo60['Bdod'],'SLLL': rowsolo60['PMP'], 'SSAT': rowsolo60['AD'],'SDUL': rowsolo60['CC'],'SSKS': rowsolo5['ksat'], 'SRGF': 0.20}), SoilLayer(70, {'SLCL': rowsolo60['Clay'], 'SLSI': rowsolo60['Silt'], 'SLOC': rowsolo60['SLOC'],'SCEC': rowsolo60['SCEC'], 'SBDM': rowsolo60['Bdod'], 'SLLL': rowsolo60['PMP'],'SSAT': rowsolo60['AD'], 'SDUL': rowsolo60['CC'], 'SSKS': rowsolo5['ksat'], 'SRGF': 0.18}), SoilLayer(80, {'SLCL': rowsolo60['Clay'], 'SLSI': rowsolo60['Silt'], 'SLOC': rowsolo60['SLOC'],'SCEC': rowsolo60['SCEC'], 'SBDM': rowsolo60['Bdod'], 'SLLL': rowsolo60['PMP'],'SSAT': rowsolo60['AD'], 'SDUL': rowsolo60['CC'], 'SSKS': rowsolo5['ksat'], 'SRGF': 0.16}), SoilLayer(90, {'SLCL': rowsolo60['Clay'], 'SLSI': rowsolo60['Silt'], 'SLOC': rowsolo60['SLOC'],'SCEC': rowsolo60['SCEC'], 'SBDM': rowsolo60['Bdod'], 'SLLL': rowsolo60['PMP'],'SSAT': rowsolo60['AD'], 'SDUL': rowsolo60['CC'], 'SSKS': rowsolo5['ksat'], 'SRGF': 0.04}), SoilLayer(100, {'SLCL': rowsolo100['Clay'], 'SLSI': rowsolo100['Silt'],'SLOC': rowsolo100['SLOC'],'SCEC': rowsolo100['SCEC'], 'SBDM': rowsolo100['Bdod'],'SLLL': rowsolo100['PMP'], 'SSAT': rowsolo100['AD'],'SDUL': rowsolo100['CC'],'SSKS': rowsolo5['ksat'], 'SRGF': 0.04 }), ] for layer in layers: soilprofile.add_layer(layer) return soilprofilesoil_profiles = []profiles_to_create = 10for idx in dfxy.index: profile = create_soil_profile(idx) soil_profiles.append(profile) if len(soil_profiles) >= profiles_to_create: breakargila = soil_profiles
This is my Weather variables
WTH_DATA = Weather( data_weather_dssat,{'TMIN': 'TMIN', 'TMAX': 'TMAX', 'RAIN': 'RAIN', 'SRAD': 'SRAD', 'RHUM': 'RHUM', 'WIND':'WIND', 'DEWP':'DEWP', 'PAR':'PAR'}, lat.iloc[0], long.iloc[0], elev,)wth = WTH_DATA
And this is my Management variables
man = Management( planting_date=datetime(2022, 10, 4), irrigation='R', harvest='M', fertilization='D',)man.harvest_details["HDATE"] = 23046man.planting_details["PPOP"] = 30man.planting_details["PPOE"] = 30man.planting_details["PLRS"] = 45man.simulation_controls["CO2"] = 'M'man.simulation_controls["WATER"] = 'Y'man.simulation_controls["WAOUT"] = 'Y'man.field['...........XCRD'] = row['geometry'].xman.field['...........YCRD'] = row['geometry'].yman.field['.............AREA'] = 14420000man.field['.SLAS'] = df_slopeman.field['.....ELEV'] = df_demman.field['WSTA....'] = wthman.field['SLDP'] = rowsolo# ## management_list.append(man)## man = management_listprint(man.field)
Im using this code to run all data variables
def run_dssat(thread, crop, man, argila, dssat_envs): dssat_env = DSSAT() dssat_env.setup() dssat_env.run(crop=crop, weather=wth, management=man, soil=argila) plant_gro_results = dssat_env.output.get('PlantGro', {}) df = pd.DataFrame(plant_gro_results) df['Profile'] = f'Soil Profile {thread + 1}' dssat_envs[thread] = dssat_env return dfthreads = len(argila)output_dataframes = [None] * threadsdssat_envs = [None] * threadswith concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: futures = [executor.submit(run_dssat, thread, crop, deepcopy(man), soilprofile, dssat_envs) for thread, soilprofile in enumerate(argila)] for future in concurrent.futures.as_completed(futures): thread = int(future.result()['Profile'].str.extract('(\d+)').iloc[0:].iloc[0])-1 output_dataframes[thread] = future.result()df = pd.concat(output_dataframes, ignore_index=False)gwad_df = df[['GWAD', 'Profile']].copy()gwad_df['GWAD'] = gwad_df['GWAD'].astype(float).round().astype(int)gwad_df['Profile_Index'] = gwad_df.groupby('Profile').cumcount()def gwad(): gwad_pivot = gwad_df.pivot(index='Profile_Index', columns='Profile', values='GWAD') gwad_pivot.columns = pd.to_numeric(gwad_pivot.columns.str.extract('(\d+)')[0]) gwad_pivot.sort_index(axis=1, inplace=True) return gwad_pivotgwad_values = gwad()print(gwad_values)
This is my result
RUN TRT FLO MAT TOPWT HARWT RAIN TIRR CET PESW TNUP TNLF TSON TSOC dap dap kg/ha kg/ha mm mm mm mm kg/ha kg/ha kg/ha t/ha 1 SB 1 26 88 6304 4418 366 0 21 253 0 -99 0 207RUN TRT FLO MAT TOPWT HARWT RAIN TIRR CET PESW TNUP TNLF TSON TSOC dap dap kg/ha kg/ha mm mm mm mm kg/ha kg/ha kg/ha t/ha 1 SB 1 26 88 6304 4418 366 0 21 253 0 -99 0 207RUN TRT FLO MAT TOPWT HARWT RAIN TIRR CET PESW TNUP TNLF TSON TSOC dap dap kg/ha kg/ha mm mm mm mm kg/ha kg/ha kg/ha t/ha 1 SB 1 26 88 6304 4418 366 0 21 253 0 -99 0 2070 1 2 3 4 5 6 7 8 9 10Profile_Index 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 02 0 0 0 0 0 0 0 0 0 03 0 0 0 0 0 0 0 0 0 04 0 0 0 0 0 0 0 0 0 0... ... ... ... ... ... ... ... ... ... ...96 4418 4418 4418 4418 4418 4418 4418 4418 4418 4418 97 4418 4418 4418 4418 4418 4418 4418 4418 4418 441898 4418 4418 4418 4418 4418 4418 4418 4418 4418 441899 4418 4418 4418 4418 4418 4418 4418 4418 4418 4418100 4418 4418 4418 4418 4418 4418 4418 4418 4418 4418
[101 rows x 10 columns]The values don't vary, and I'm looking for reasons why these values don't vary in my code...