【发布时间】:2022-08-18 21:42:20
【问题描述】:
我正在尝试跨多个列聚合一个数据框,按Date 分组。有些单元格包含 nan,我想保留它。所以我的 df 看起来像这样:
import random
import numpy as np
import pandas as pd
rng = [\'2015-02-24\',\'2015-02-24\',\'2015-02-24\',\'2015-02-24\',\'2015-02-24\',\'2015-02-24\',
\'2015-02-25\',\'2015-02-25\',\'2015-02-25\',\'2015-02-25\',\'2015-02-25\',\'2015-02-25\']
rng = pd.to_datetime(rng)
Predicted = [random.randrange(-1, 50, 1) for i in range(12)]
Actual_data = [5,3,8,2,9,20, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN]
Category = [\'A\',\'A\',\'A\',\'B\',\'B\',\'B\',\'A\',\'A\',\'A\',\'B\',\'B\',\'B\']
df = pd.DataFrame({ \'Date\': rng, \'Predicted\' : Predicted, \'Actual\': Actual_data, \'Category\': Category})
df
Date Predicted Actual Category
0 2015-02-24 0 5.0 A
1 2015-02-24 36 3.0 A
2 2015-02-24 30 8.0 A
3 2015-02-24 33 2.0 B
4 2015-02-24 49 9.0 B
5 2015-02-24 42 20.0 B
6 2015-02-25 25 NaN A
7 2015-02-25 9 NaN A
8 2015-02-25 21 NaN A
9 2015-02-25 39 NaN B
10 2015-02-25 17 NaN B
11 2015-02-25 11 NaN B
我想分组:Date,从而将Predicted 和Actual 相加,留下Category。另外,由于我想维护只有 NaN 的组,以保持 NaN 值,而不是将其转换为 0。所以最后我想要这个:
Date Predicted Actual
0 2015-02-24 190 49
1 2015-02-25 122 NaN
我试过这样的事情:
df = data.groupby([\'Date\'])[\'Predicted\', \'Actual\'].agg(\'sum\').reset_index()
看起来它有效,但后来我看到它将 NaN 转换为 0,这是我不想要的。我尝试添加skipna=False,但它说无法添加它。当我在某处读到这可能是问题时,我确实更新到了最新版本的熊猫,但这没关系。有人可以帮我吗..?
标签: python pandas group-by aggregate nan