字典`count_if = 1`的熊猫聚合被忽略。

时间:2018-10-15 07:12:26

标签: python pandas

我想使用sum汇总一个Pandas DataFrame并在一个组的所有值均为NaN的情况下获取NaN。这在.agg('sum', min_count=1)的情况下有效,但在使用聚合字典时会忽略min_count

我在这里缺少什么?如何解决?

示例:

import pandas as pd
import numpy as np
d = {'l':  ['a', 'b', 'a', 'b', 'c', 'c'],
     'v': [-1, 1, np.nan, 1, np.nan, np.nan],
     'w': [-1, 1, np.nan, 1, np.nan, np.nan]}
df = pd.DataFrame(d)

sum将为所有0.0的组返回NaN,但我们可以使用参数min_count=1来解决:

print(df.groupby('l')['v'].agg('sum'))
> l
> a   -1.0
> b    2.0
> c    0.0
> Name: v, dtype: float64

print(df.groupby('l')['v'].agg('sum', min_count=1))
> l
> a   -1.0
> b    2.0
> c    NaN
> Name: v, dtype: float64

但是当使用字典时,似乎会忽略关键字参数。

df.groupby('l').agg({'v':'sum', 'w':'mean'}, min_count=1)
> Name: v, dtype: float64
>      v    w
> l          
> a -1.0 -1.0
> b  2.0  1.0
> c  0.0  NaN

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用lambda函数:

df1 = df.groupby('l').agg({'v': lambda x: x.sum(min_count=1), 'w': 'mean'})
print (df1)
     v    w
l          
a -1.0 -1.0
b  2.0  1.0
c  NaN  NaN