You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:如何基于数据量大小将一个DataFrame的信息分配到另一个DataFrame?

解决方案:无需join操作更新df1

我来帮你解决这个问题!既然不能用关联(join)操作,我们可以通过根据df2的size列扩展对应行,生成与df1行数完全匹配的Name/Year序列的方式来实现需求,具体步骤如下:

1. 先构造示例数据

首先我们先还原你提供的df1和df2:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({'val': [-2, -1, -5, -2, -4, -7, -7, -3, -6]})

# 构造df2
df2 = pd.DataFrame({
    'Name': ['Marc', 'Marc', 'Eric', 'Eric', 'Sara', 'Sara'],
    'Year': [2010, 2011, 2010, 2011, 2010, 2011],
    'size': [2, 1, 1, 1, 2, 2]
})

2. 扩展df2生成匹配序列

利用repeat方法根据size列的数值重复df2的对应行,这样就能得到和df1行数一致的Name/Year数据:

# 按size扩展df2的行,并重置索引
expanded_meta = df2.loc[df2.index.repeat(df2['size'])].reset_index(drop=True)

3. 给df1添加新列

直接将扩展后的Name和Year列赋值给df1即可:

# 将扩展后的Name和Year添加到df1
df1['Name'] = expanded_meta['Name']
df1['Year'] = expanded_meta['Year']

验证结果

执行完上述代码后,df1就会变成你想要的样子:

val  Name  Year
0   -2  Marc  2010
1   -1  Marc  2010
2   -5  Marc  2011
3   -2  Eric  2010
4   -4  Eric  2011
5   -7  Sara  2010
6   -7  Sara  2010
7   -3  Sara  2011
8   -6  Sara  2011

这个方法完全不需要使用join操作,核心思路是通过扩展元数据(df2)的行来匹配目标数据(df1)的行数,直接完成列的赋值。

内容的提问来源于stack exchange,提问作者emax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:32:39