简体   繁体   English

循环遍历参数字典并创建数据框值

[英]Loop through parameter dictionary and create dataframe values

Is there a faster/better way to set parameters and then use them to set values in a dataframe?是否有更快/更好的方法来设置参数,然后使用它们在数据框中设置值? See basic code example below.请参阅下面的基本代码示例。

  df_loop = pd.DataFrame(columns=['streak', 'bet', 'runs'], index=np.arange(1,100,1))

params = {
        'streak_game' : [3,4,5,6,7],
        'initial_bet' : [50, 100, 150, 200, 250],
        'run_diff_abs' : [x for x in range(150, 40,-10)]
         }

for i in params['streak_game']:
    streak_game = i
    for j in params['initial_bet']:
        initial_bet = j
        for k in params['run_diff_abs']:
            run_diff = k

           # actual code is more complex, but I am setting a bunch of values similar to below
            for idx, row in df_loop.iterrows():
                df_loop.loc[idx, 'streak'] = i
                df_loop.loc[idx, 'bet'] = j
                df_loop.loc[idx, 'runs'] = k

Actual dataframe is about 4,600 rows.实际数据框约为 4,600 行。 But I plan on creating larger data sets to test my logic.但我计划创建更大的数据集来测试我的逻辑。

You can try你可以试试

import itertools
out = df_loop.join(pd.DataFrame(itertools.product(*params.values()),columns= params.keys()))

I'm not sure what is the reason you initialize the dataframe with np.nan .我不确定您使用np.nan初始化数据框的原因是什么。 However, in your code, you should first initialize the parameters in a new variable before assigning it to the dataframe.但是,在您的代码中,您应该首先在新变量中初始化参数,然后再将其分配给数据框。

my_param = [(i,j,k) for i in params['streak_game'] for j in params['initial_bet'] for k in params['run_diff_abs']]

Next, instead of using iterrows , you can just use iloc to do so.接下来,您可以使用iloc来代替使用iterrows

for i in range(len(df_loop)):
    df_loop.iloc[i] = my_param[i]

Too many nested loops will just cause redundance in your code.太多的嵌套循环只会导致代码冗余。

This should work.这应该有效。

df_loop = pd.DataFrame(columns=['streak', 'bet', 'runs'])

params = {
        'streak_game' : [3,4,5,6,7],
        'initial_bet' : [50, 100, 150, 200, 250],
        'run_diff_abs' : [x for x in range(150, 40,-10)]
         }
list = []
count = 0
for i in params['streak_game']:
    streak_game = i
    for j in params['initial_bet']:
        initial_bet = j
        for k in params['run_diff_abs']:
            run_diff = k
            df2 = pd.DataFrame(data=[[i,j,k]],columns=['streak', 'bet', 'runs'])
            df_loop = pd.concat([df_loop,df2])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM