1

Goal: Append column Mean with the same average value propagated per column Model.

I want to append the mean of each Model's Time scores.

The Mean value should be the same, per Model.

df is already in this grouped order.

df:

Model | Time
-------------
bert | 0.0001432
bert | 0.0001123
mlp | 0.2321
mlp | 0.2324

Desired df:

Model | Time | Mean
-------------------
bert | 0.0001432 | 0.00012775
bert | 0.0001123 | 0.00012775
mlp | 0.2321 | 0.23225
mlp | 0.2324 | 0.23225

Code:

models = df.Model.unique()
mean = df.groupby('a')['b'].mean()
for m in models:
    sums[m]

df2 = df.assign(Average = mean)

Please let me know if there's anything else I can add to post to clarify.

DanielBell99
  • 896
  • 5
  • 25
  • 57

1 Answers1

1

Use transform('mean') instead of mean() to broadcast values on each row:

df['Mean'] = df.groupby('Model').transform('mean')
print(df)

# Output
  Model      Time      Mean
0  bert  0.000143  0.000128
1  bert  0.000112  0.000128
2   mlp  0.232100  0.232250
3   mlp  0.232400  0.232250

Values are not rounded:

with pd.option_context('display.float_format', '{:,.10f}'.format):
    display(df)

# Output:
  Model         Time         Mean
0  bert 0.0001432000 0.0001277500
1  bert 0.0001123000 0.0001277500
2   mlp 0.2321000000 0.2322500000
3   mlp 0.2324000000 0.2322500000
Corralien
  • 109,409
  • 8
  • 28
  • 52