我正试图使用其他两列的选择标准来计算Pandas数据帧列的平均值。在下面的代码中,有一个"Trace"one_answers"Sample"列将用于选择条件,而"Value"列中的数字将用于计算。我想按"Trace"数字分组,只取"Sample"数字3、4和5的平均值。然后,我想在原始数据帧"df"中创建一个新列,并将计算出的平均值放在与正确的"Trace"编号对应的所有行中。
d = {"Trace": [1,1,1,1,1,2,2,2,2,2], "Sample": [1,2,3,4,5,1,2,3,4,5], "Value": [2,3,5,6,1,8,9,5,4,3]}
有什么想法吗?
谢谢!
您可以尝试一下,先过滤您的数据帧,然后用均值分组,然后在"Trace"上连接回原始数据帧(这是数据帧之间的通用列名,在groupby的结果上为reset_index
(:
df[df['Sample'].isin([3,4,5])].groupby('Trace')['Value'].mean()
.rename('Avg Value').reset_index().merge(df)
输出:
Trace Avg Value Sample Value
0 1 4 1 2
1 1 4 2 3
2 1 4 3 5
3 1 4 4 6
4 1 4 5 1
5 2 4 1 8
6 2 4 2 9
7 2 4 3 5
8 2 4 4 4
9 2 4 5 3
或
df.groupby('Trace')
.apply(lambda x: x.loc[x['Sample'].isin([3,4,5]),'Value'].mean())
.rename('Avg Value').reset_index().merge(df)
输出:
Trace Avg Value Sample Value
0 1 4.0 1 2
1 1 4.0 2 3
2 1 4.0 3 5
3 1 4.0 4 6
4 1 4.0 5 1
5 2 4.0 1 8
6 2 4.0 2 9
7 2 4.0 3 5
8 2 4.0 4 4
9 2 4.0 5 3