我想使用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)
感谢您的帮助!
您可以使用 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)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |