熊猫-将具有多个索引的字典映射到列

时间:2019-10-18 09:01:40

标签: python pandas numpy data-science

我有两个大数据集,我无法通过合并两个数据帧来进行聚合。我必须首先在df_train上进行聚合,然后将值映射到df_test

df_traindf_test具有完全相同的id1id2,但是df_test具有更多样本。我正在计算id1id2上的目标均值,并将其存储为内存问题的字典。

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 }

如何将这些值正确映射到id1id2列?

(有 6000万数据行, 1449 id1 4 id2个值,因此速度很重要)

编辑

df_train[['id1', 'id2']].map(target_mean)

我尝试了此操作,但是map仅支持pd.Series

1 个答案:

答案 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
相关问题