我只想对数据框中一列中包含的不同组的最后 5 行进行平均,并制作一个包含两列的新数据框
I want to average only the last 5 rows of different groups contained in one column in a dataframe and make a new dataframe containing two columns
我有一个包含四列的数据框。在 'Intensity' 列中有 3 个组(0、50、100)。我只想对 3 组列 'Intensity' 的列 Value 的最后 2 个值进行平均。然后我想用 'Replication'、'Regime'、'Intensity'、'Value_mean' 和 'Value_sd' 列创建一个新数据框,最后两个是计算平均值和标准偏差。
Replication Regime Intensity Value
1 Ctrl 0 2
1 Ctrl 0 3
1 Ctrl 0 4
1 Ctrl 0 5
1 Ctrl 0 6
1 Ctrl 0 7
1 Ctrl 50 1
1 Ctrl 50 2
1 Ctrl 50 2
1 Ctrl 50 4
1 Ctrl 50 6
1 Ctrl 50 6
1 Ctrl 100 2
1 Ctrl 100 1
1 Ctrl 100 0
2 Ctrl 100 3
2 Ctrl 0 7
2 Ctrl 0 3
2 Ctrl 0 6
2 Ctrl 0 2
2 Ctrl 0 1
2 Ctrl 0 5
2 Ctrl 50 12
2 Ctrl 50 22
2 Ctrl 50 52
2 Ctrl 50 22
2 Ctrl 50 2
2 Ctrl 50 2
2 Ctrl 100 22
2 Ctrl 100 2
2 Ctrl 100 25
到目前为止,我使用了函数 apply,但我没有得到数据框,而是得到了一个系列
df2 = df1.groupby(['Regime','Intensity']).apply(lambda x:
x.tail(3).mean(axis=0,level=0))
然后我得到
Intensity A
Regime Intensity
Ctrl 0 0 -0.87
50 50 2.08
100 100 4.84
使用DataFrame.tail
in first step and then create new columns by GroupBy.transform
:
df2 = df1.groupby(['Regime','Intensity']).tail(3).copy()
df2['mean_val'] = df2.groupby('Regime')['Value'].transform('mean')
df2['std_val'] = df2.groupby('Regime')['Value'].transform('std')
print (df2)
Replication Regime Intensity Value mean_val std_val
19 2 Ctrl 0 2 9.222222 10.425663
20 2 Ctrl 0 1 9.222222 10.425663
21 2 Ctrl 0 5 9.222222 10.425663
25 2 Ctrl 50 22 9.222222 10.425663
26 2 Ctrl 50 2 9.222222 10.425663
27 2 Ctrl 50 2 9.222222 10.425663
28 2 Ctrl 100 22 9.222222 10.425663
29 2 Ctrl 100 2 9.222222 10.425663
30 2 Ctrl 100 25 9.222222 10.425663
我有一个包含四列的数据框。在 'Intensity' 列中有 3 个组(0、50、100)。我只想对 3 组列 'Intensity' 的列 Value 的最后 2 个值进行平均。然后我想用 'Replication'、'Regime'、'Intensity'、'Value_mean' 和 'Value_sd' 列创建一个新数据框,最后两个是计算平均值和标准偏差。
Replication Regime Intensity Value
1 Ctrl 0 2
1 Ctrl 0 3
1 Ctrl 0 4
1 Ctrl 0 5
1 Ctrl 0 6
1 Ctrl 0 7
1 Ctrl 50 1
1 Ctrl 50 2
1 Ctrl 50 2
1 Ctrl 50 4
1 Ctrl 50 6
1 Ctrl 50 6
1 Ctrl 100 2
1 Ctrl 100 1
1 Ctrl 100 0
2 Ctrl 100 3
2 Ctrl 0 7
2 Ctrl 0 3
2 Ctrl 0 6
2 Ctrl 0 2
2 Ctrl 0 1
2 Ctrl 0 5
2 Ctrl 50 12
2 Ctrl 50 22
2 Ctrl 50 52
2 Ctrl 50 22
2 Ctrl 50 2
2 Ctrl 50 2
2 Ctrl 100 22
2 Ctrl 100 2
2 Ctrl 100 25
到目前为止,我使用了函数 apply,但我没有得到数据框,而是得到了一个系列
df2 = df1.groupby(['Regime','Intensity']).apply(lambda x:
x.tail(3).mean(axis=0,level=0))
然后我得到
Intensity A
Regime Intensity
Ctrl 0 0 -0.87
50 50 2.08
100 100 4.84
使用DataFrame.tail
in first step and then create new columns by GroupBy.transform
:
df2 = df1.groupby(['Regime','Intensity']).tail(3).copy()
df2['mean_val'] = df2.groupby('Regime')['Value'].transform('mean')
df2['std_val'] = df2.groupby('Regime')['Value'].transform('std')
print (df2)
Replication Regime Intensity Value mean_val std_val
19 2 Ctrl 0 2 9.222222 10.425663
20 2 Ctrl 0 1 9.222222 10.425663
21 2 Ctrl 0 5 9.222222 10.425663
25 2 Ctrl 50 22 9.222222 10.425663
26 2 Ctrl 50 2 9.222222 10.425663
27 2 Ctrl 50 2 9.222222 10.425663
28 2 Ctrl 100 22 9.222222 10.425663
29 2 Ctrl 100 2 9.222222 10.425663
30 2 Ctrl 100 25 9.222222 10.425663