微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas 基于多空列的行计算 Groupby 统计信息

如何解决Pandas 基于多空列的行计算 Groupby 统计信息

我有一个示例数据框,如下所示:

   df :

   ST   LW      UD  vl
   
   E1   e1   pp@yr   2
   F3   l1   pp@yr   4
   F3   l2   pp@yr   7
   E1   e3  pp2@yr   3
   F3   l4  pp3@yr  13
   E1   e5  pp3@yr   7
   F3   l6  pp3@yr   9
   E1   e7  pp2@yr   5
   E1   e8  pp3@yr   3
   F3   f9  pp4@yr   2
   F3  f11  pp4@yr   5
   F3  f13  pp5@yr   7
   F3  f7   pp5@yr   9

我想要做的任务是根据列 ST 取均值和标准差,如果它只包含 E1 并执行以下操作:

     dfD = df[df['ST'] == 'E1']

     stats_df = dfD.groupby('UD')['vl'].describe()[['mean','std']]


     mys = pd.DataFrame(stats_df).reset_index()

数据框 mys 如下所示:

     mys


      UD       mean   std

      pp2@yr    4.0   1.414214
      pp3@yr    5.0   2.828427
      pp@yr     2.0   NaN

然后我将数据与原始数据框合并如下:

       mdf = pd.merge(df,mys,how='left',on='UD')

结果数据框如下:

       mdf


     ST  LW  UD     vl  mean    std
     E1  e1  pp@yr   2  2.0     NaN
     F3  l1  pp@yr   4  2.0     NaN
     F3  l2  pp@yr   7  2.0     NaN
     E1  e3  pp2@yr  3  4.0    1.414214
     F3 l4   pp3@yr  13 5.0    2.828427
     E1 e5   pp3@yr  7  5.0    2.828427
     F3 l6   pp3@yr  9  5.0    2.828427
     E1 e7   pp2@yr  5  4.0    1.414214
     E1 e8   pp3@yr  3  5.0    2.828427
     F3 f9   pp4@yr  2  NaN    NaN
     F3 f11  pp4@yr  5  NaN    NaN
     F3 f13  pp5@yr  7  NaN    NaN
     F3 f7   pp5@yr  9  NaN    NaN

抱歉拖了这么久。但现在我来了实际的问题陈述:

问题是最后四行。问题是,无论何时均值和标准差都是空值,那么我想仅基于具有基于 ST = F3 的空值和基于 UD 列的 grouby 的行来计算均值和标准值。所以输出应该像(注意:我计算了最后 4 行的平均值和统计数据

   finaldf


     ST  LW   UD     vl mean    std

     E1  e1  pp@yr   2  2.0     NaN
     F3  l1  pp@yr   4  2.0     NaN
     F3  l2  pp@yr   7  2.0     NaN
     E1  e3  pp2@yr  3  4.0    1.414214
     F3 l4   pp3@yr  13 5.0    2.828427
     E1 e5   pp3@yr  7  5.0    2.828427
     F3 l6   pp3@yr  9  5.0    2.828427
     E1 e7   pp2@yr  5  4.0    1.414214
     E1 e8   pp3@yr  3  5.0    2.828427
     F3 f9   pp4@yr  2  3.5    1.5
     F3 f11  pp4@yr  5  3.5    1.5
     F3 f13  pp5@yr  7  8.0    1.0
     F3 f7   pp5@yr  9  8.0    1.0

我可以尝试遍历 'mdf' 数据框并查找 mean 和 std 列是否都具有空值,然后仅基于这些行进行分组,但在计算上效率不高,我正在寻找有效的 Pythonic 解决方案。任何帮助将不胜感激。

解决方法

好吧,如果您想要过滤掉数据框中具有空值的行,然后计算这些行的均值和标准差,您可以创建一个掩码并使用该掩码来过滤 df 并计算您的值希望稍后将它们插入到数据框中。

它看起来像这样:

mask = mdf[(mdf['mean'].isna()) & (mdf['std'].isna())]
mean = mask['v1'].mean()
std = mask['v1'].std()
mdf[(mdf['mean'].isna()) & (mdf['std'].isna())]['mean'] = mean
mdf[(mdf['mean'].isna()) & (mdf['std'].isna())]['std'] = std

注意:您可以继续向掩码添加限制,只需键入 &(and) |(or),后跟括号中的条件,例如: & (mdf['ST']='F3 ')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。