Python 熊猫:执行多个复杂聚合的惯用方法?

Python 熊猫:执行多个复杂聚合的惯用方法?,python,pandas,aggregation,Python,Pandas,Aggregation,我的表格如下: ID SCORE A NaN A NaN B 1 B 2 C 5 我想要以下输出: ID SUM_SCORE SIZE_SCORE A NaN 2 B 3 2 C 5 1 因为我想保留NaN,所以我需要使用sum(min\u count=1)。因此,到目前为止,我有以下几点: grp = df.groupby('ID') sum_score = grp[

我的表格如下:

ID   SCORE
A    NaN
A    NaN
B    1
B    2
C    5
我想要以下输出:

ID    SUM_SCORE   SIZE_SCORE
A     NaN         2
B     3           2
C     5           1
因为我想保留NaN,所以我需要使用
sum(min\u count=1)
。因此,到目前为止,我有以下几点:

grp = df.groupby('ID')
sum_score = grp['SCORE'].sum(min_count=1).reset_index()
size_score = grp['SCORE'].size().reset_index()
result = pd.merge(sum_score, size_score, on=['ID'])

这感觉真的很不雅。有没有更好的方法来获得我想要的结果?

您可以使用以下方法进行聚合:

s=df.groupby('ID').SCORE.agg([('sum_score',lambda x : x.sum(min_count=1)),
                             ('size_score','size')] ).reset_index()
  ID  sum_score  size_score
0  A        NaN           2
1  B        3.0           2
2  C        5.0           1
df_agg = df.groupby("ID", as_index=False).agg(["sum","count"])

# rename your columns
df_agg.columns = ["ID","SUM_SCORE", "SIZE_SCORE"]

IIUC是什么意思?很奇怪,我的数据集需要~7秒。分别计算它们需要0.046秒。知道为什么吗?@AlexanderDavid我不确定,如果你想加快速度,请分开做,然后返回。这不会保留NaN的,因为熊猫中的总和([NaN,NaN])默认为0。请看这里:啊,明白了。那很有趣。上面的答案看起来不错。