我有两个大数据集,我无法通过合并两个数据帧来进行聚合。我必须首先在df_train
上进行聚合,然后将值映射到df_test
。
df_train
和df_test
具有完全相同的id1
和id2
,但是df_test
具有更多样本。我正在计算id1
和id2
上的目标均值,并将其存储为内存问题的字典。
target_mean = df_train.groupby(['id1', 'id2'])['target'].mean().to_dict()
这是聚合的输出。键是元组对,其中id1
作为第一个元素,id2
作为第二个元素,并且值是组的目标均值。
{(0, 0): 146.45497131347656,
(1, 0): 74.86539459228516,
(2, 0): 14.551384925842285,
(3, 0): 235.5499725341797,
(4, 0): 976.5567626953125,
(5, 0): 17.894445419311523,
(6, 0): 64.06660461425781,
(7, 0): 350.33416748046875,
(7, 1): 3097.043701171875,
(8, 0): 256.92779541015625,
(9, 0): 72.7147445678711 }
如何将这些值正确映射到id1
和id2
列?
(有 6000万数据行, 1449 id1
和 4 id2
个值,因此速度很重要)
编辑:
df_train[['id1', 'id2']].map(target_mean)
我尝试了此操作,但是map
仅支持pd.Series
。
答案 0 :(得分:1)
我认为最好在此处使用DataFrame.join
target_mean = df_train.groupby(['id1', 'id2'])['target'].mean().rename('avg')
df_test = df_test.join(target_mean, on=['id1', 'id2'])
您的解决方案是可能的,但是我猜map
的{{1}}会更慢:
MultiIndex