我想使用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
谢谢您的帮助!
答案 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