I have various dataframes named: step1, step2, step5, step7 and so on..

I wrote a function as follows:

def statistics(df):
    plus_one = df['BacksGas_Flow_sccm'][df['y_ocsvm'] == 1].describe()
    negative_one = df['BacksGas_Flow_sccm'][df['y_ocsvm'] == -1].describe()
    return plus_one, negative_one

where BacksGas_Flow_sccm & y_ocsvm are the names of column in all the different dataframes.

After this, I am trying to create a new dataframe that contains the statstical records returned by the describe() and I did that by:

stats = pd.DataFrame(statistics(step1))
stats = stats.append(pd.DataFrame(statistics(step2)))

and that gave me:

                    count          mean               std   min 25% 50% 75% max
BacksGas_Flow_sccm  1622.0  0.4370119194410199  0.11346778078574718 0.33333333333333304 0.33333333333333304 0.5 0.5 0.6666666666666665
BacksGas_Flow_sccm  426.0   0.19444444444444436 0.1873737774126198  0.0 0.16666666666666652 0.16666666666666652 0.16666666666666652 1.0
BacksGas_Flow_sccm  1285.0  0.5418071768266265  0.1998356616378414  0.2222222222222221  0.2222222222222221  0.6666666666666667  0.6666666666666667  0.6666666666666667
BacksGas_Flow_sccm  8028.0  0.4678901622100473  0.10157692912484724 0.0 0.4444444444444444  0.4444444444444444  0.5555555555555556  0.9999999999999998

I just want the index name to be changed from BacksGas_Flow_sccm to the corresponding dataframe they belong to

Expected Output:

         count         mean               std   min 25% 50% 75% max
Step1   1622.0  0.4370119194410199  0.11346778078574718 0.33333333333333304 0.33333333333333304 0.5 0.5 0.6666666666666665
Step1   426.0   0.19444444444444436 0.1873737774126198  0.0 0.16666666666666652 0.16666666666666652 0.16666666666666652 1.0
Step2   1285.0  0.5418071768266265  0.1998356616378414  0.2222222222222221  0.2222222222222221  0.6666666666666667  0.6666666666666667  0.6666666666666667
Step2   8028.0  0.4678901622100473  0.10157692912484724 0.0 0.4444444444444444  0.4444444444444444  0.5555555555555556  0.9999999999999998

I would like to know what can this be done.

thanks

2 Answers

1
Quang Hoang On Best Solutions

You could do so in statistics function, passing the name in:

def statistics(df, name):
    plus_one = df['BacksGas_Flow_sccm'][df['y_ocsvm'] == 1].describe()
    negative_one = df['BacksGas_Flow_sccm'][df['y_ocsvm'] == -1].describe()
    ret_df = pd.DataFrame((plus_one, negative_one))
    ret_df['source'] = name

    return ret_df

stats = pd.DataFrame(statistics(step1, 'step1'))
stats = stats.append(pd.DataFrame(statistics(step2, 'step2')))
1
Yuca On

It's ugly but this should give you what you want without repeating indexes:

stats = pd.DataFrame(statistics(step1))
stats['step'] = 'Step1'
temp = pd.DataFrame(statistics(step2))
temp['step'] = 'Step2'
stats = stats.append(temp)
stats = stats.reset_index()