Python Pandas-使用两列中的条件计算平均值

时间:2018-07-31 21:29:02

标签: python pandas

我正在尝试使用其他两列中的选择条件来计算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]}

有什么想法吗?

谢谢!

1 个答案:

答案 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