我正在尝试使用其他两列中的选择条件来计算Pandas数据框列的平均值。在下面的代码中,有一个“ Trace”和“ Sample”列将用于选择标准,而“ Value”列中的数字将在计算中使用。我想按“跟踪”数字分组,仅取“样本”数字3、4和5的平均值。然后,我想在原始数据帧“ df”中创建一个新列,并将计算出的平均值放在在与正确的“跟踪”编号相对应的所有行中。
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]}
有什么想法吗?
谢谢!
答案 0 :(得分:4)
您可以尝试此操作,首先过滤数据框,然后用均值进行分组,然后重新连接到“跟踪”上的原始数据框(这是在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
OR
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