【问题标题】:Group by and find sum for groups but return NaN as NaN, not 0分组并查找组的总和,但将 NaN 返回为 NaN,而不是 0
【发布时间】:2018-08-20 09:35:26
【问题描述】:

我有一个数据框,其中每个唯一组有 4 行。 所以我需要按使它们唯一的列进行分组,并进行一些聚合,例如最大值、最小值、总和和平均值。 但问题是我有一些组的所有 NaN 值(在某些列中)并返回一个 0。是否可以返回一个 NaN? 例如: df

       time            id     el    conn   column1  column2  column3
2018-02-11 14:00:00     1     a      12      8        5         NaN
2018-02-11 14:00:00     1     a      12      1        NaN       NaN
2018-02-11 14:00:00     1     a      12      3        7         NaN
2018-02-11 14:00:00     1     a      12      4        12        NaN
2018-02-11 14:00:00     2     a      5       NaN      5         5
2018-02-11 14:00:00     2     a      5       NaN      3         2
2018-02-11 14:00:00     2     a      5       NaN      NaN       6
2018-02-11 14:00:00     2     a      5       NaN      7         NaN

因此,例如,我需要 groupby ('id', 'el', 'conn') 并找到 column1、column3 和 column2 的总和。 (在实际情况下,我需要对更多列执行聚合)。 我尝试了几种方法:.sum()、.transform('sum'),但是对于具有所有 NaN 值的组返回零。

期望的输出:

    time               id    el     conn   column1  column2  column3
2018-02-11 14:00:00     1     a      12      16       24       NaN
2018-02-11 14:00:00     2     a      5       NaN      15        13

欢迎任何帮助。

【问题讨论】:

标签: python pandas numpy dataframe nan


【解决方案1】:

将参数min_count 更改为1 - 这适用于last pandas version 0.22.0

min_count : 整数,默认 0

执行操作所需的有效值数量。如果存在的非 NA 值少于 min_count,则结果将为 NA。

0.22.0 版中的新增功能:添加默认值为 1。这意味着全 NA 或空系列的和或乘积为 NaN。

df = df.groupby(['time','id', 'el', 'conn'], as_index=False).sum(min_count=1)
print (df)
                  time  id el  conn  column1  column2  column3
0  2018-02-11 14:00:00   1  a    12     16.0     24.0      NaN
1  2018-02-11 14:00:00   2  a     5      NaN     15.0     13.0

【讨论】:

  • 我得到了:TypeError: f() got an unexpected keyword argument 'min_count'。
  • @jovicbg - 你的熊猫版本是什么?
  • 是的,这就是问题所在。 0.19 不幸的是,我无法升级,因为它不是本地的,不取决于我。
  • 谢天谢地。我不得不完全退出 jupyter notebook 并再次登录,现在它可以工作了。非常感谢。 :)
  • 谢谢!这拯救了我的一天!
【解决方案2】:

我觉得应该是这样的。

df.groupby(['time','id','el','conn']).sum() 

Python 2 中的输出:

一些关于 groupby 的小教程我觉得在这些情况下很有趣:

  1. https://chrisalbon.com/python/data_wrangling/pandas_apply_operations_to_groups/
  2. https://www.tutorialspoint.com/python_pandas/python_pandas_groupby.htm

【讨论】:

  • 我不能使用他,因为我需要指定列,有些列需要用于平均值、最小值、最大值等,而不仅仅是总和。
猜你喜欢
  • 2020-07-14
  • 2022-12-19
  • 2012-04-28
  • 1970-01-01
  • 2017-08-18
  • 2018-05-11
  • 1970-01-01
  • 2015-04-25
  • 2013-07-11
相关资源
最近更新 更多