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
相关产品推荐
相关产品推荐

