我有一个数据帧df1:-

City Territory Region Area Target
Chicopee Springfield MA Northeast National 58761
Feeding Hills Springfield MA Northeast National 65204
Feeding Hills Springfield MA Northeast National 79862
Feeding Hills Springfield MA Northeast National 67247
Holyoke Springfield MA Northeast East 64347
Holyoke Worcester MA Northeast East 73473

使用该代码在该水平上用目标的平均值进行插补,我得到:

for col in columns: #columns=['City', 'Territory`,'Region','Area']
    avg_tar= df.groupby(col).agg(**{'avg_tar_by_'+col: ('Target', np.mean)})
    df = df.merge(avg_tar, on=col)
df = df.drop(columns=columns)
df = df.rename(columns={'avg_tar_by_'+col: col for col in columns})

City Territory Region Area Target
58761 67084.2 68149 67768.5 58761
70771 67084.2 68149 67768.5 65204
70771 67084.2 68149 67768.5 79862
70771 67084.2 68149 67768.5 67247
68910 67084.2 68149 68910 64347
68910 73473 68149 68910 73473

我有另一个数据帧df2;我想用df1中获得的映射值映射df2的所有列的类别:-

City Territory Region Area Target
Chicopee Springfield MA Northeast National 58761
Chicopee Springfield MA Northeast East 65204
Feeding Hills Springfield MA Northeast East 79862
Feeding Hills Worcester MA Northeast East 67247
Feeding Hills Worcester MA Northeast East 64347
Holyoke Worcester MA Northeast East 73473

预期输出:

City Territory Region Area Target
58761 67084.2 68149 67768.5 58761
58761 67084.2 68149 67768.5 65204
70771 67084.2 68149 67768.5 79862
70771 73473 68149 68910 67247
70771 73473 68149 68910 64347
68910 73473 68149 68910 73473

推荐答案

IIUC,您试图将df1df2中每个列的每组的平均Target值映射到一起-您可以通过将平均Target值提取到字典中来实现-

# Creating the mapping dict
grouping_cols = [col for col in df1.columns if col != 'Target']
g_map = {g: dict(df1.groupby(g)['Target'].agg('mean')) for g in grouping_cols}

# Mapping from the dict
df3 = pd.DataFrame()
for g in g_map:
    df3[g] = df2[g].map(g_map[g])
df3['Target'] = df2['Target']

Output (df3)

    City  Territory  Region     Area  Target
0  58761    67084.2   68149  67768.5   58761
1  58761    67084.2   68149  68910.0   65204
2  70771    67084.2   68149  68910.0   79862
3  70771    73473.0   68149  68910.0   67247
4  70771    73473.0   68149  68910.0   64347
5  68910    73473.0   68149  68910.0   73473

Python相关问答推荐

使用LangChain拆分HTML文件并保存块

这些变量是否相等,因为它们引用相同的实例,尽管它们看起来应该具有不同的值?

单击cookie按钮,但结果不一致

使用Python Great Expectations和python-oracledb

Python中的Pool.starmap异常处理

如何知道标志是否由用户传递或具有默认值?

Plotly:如何更改Heatmap中彩色条的勾选文本

机器人与Pyton Minecraft服务器状态不和

在Python和matlab中显示不同 colored颜色 的图像

重新匹配{ }中包含的文本,其中文本可能包含{{var}

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

从numpy数组和参数创建收件箱

如何找到满足各组口罩条件的第一行?

Python库:可选地支持numpy类型,而不依赖于numpy

Polars:用氨纶的其他部分替换氨纶的部分

avxspan与pandas period_range

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

如何在UserSerializer中添加显式字段?

删除marplotlib条形图上的底边

Matplotlib中的字体权重