我有一个包含四列的数据帧。在"强度"列中有3组(0、50、100(。我只想在"强度"列的3组中对"值"列的最后2个值求平均值。然后,我想制作一个新的数据帧,列为"复制"、"制度"、"强度"、"Value_mean"one_answers"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
到目前为止,我使用了application函数,但我没有得到数据帧,而是得到了一个系列
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
,然后通过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