我有一个DataFrame
,有key
列和value
列.value
有时是NA:
df = pd.DataFrame({
'key': np.random.randint(0, 1_000_000, 100_000_000),
'value': np.random.randint(0, 1_000, 100_000_000).astype(float),
})
df.loc[df.value == 0, 'value'] = np.nan
我想以key
为单位分组,然后对value
列求和.如果任何value
是key
的NA,我希望总和是NA.
在我的机器上,this answer中的代码花费了35.7秒:
df.groupby('key')['value'].apply(np.array).apply(np.sum)
这比理论上可能的速度要慢得多.在我的机器上,内置的Pandas SeriesGroupBy.sum
花了6.31秒:
df.groupby('key')['value'].sum()
但它不支持NA处理(参见this GitHub issue).
我可以编写什么代码来获得与内置操作符相当的性能,同时仍然处理NAN?