忽略字典 `count_if=1` 的 Pandas 聚合。

Sno*_*ing 5 python pandas

我想使用sum并获取Pandas DataFrame 来聚合 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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!

jez*_*ael 9

您可以使用 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
Run Code Online (Sandbox Code Playgroud)