首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:如何合并和划分两个数据帧?

Python:如何合并和划分两个数据帧?
EN

Stack Overflow用户
提问于 2019-09-02 23:32:59
回答 2查看 96关注 0票数 1

我有一个数据帧df,其中包含分配给一些建筑物b的population p

代码语言:javascript
运行
复制
df
    p    b
0  150   3
1  345   7
2  177   4
3  267   2

和一个数据帧df1,它将一些其他建筑物b1关联到df中的建筑物

代码语言:javascript
运行
复制
df1
    b1    b
0   17    3
1   9     7
2   13    7

我想给在df1中有关联的建筑物分配一个除以建筑物数量的人口。通过这种方式,我们生成了df2,它将种群150/2=75分配给建筑物317,并将种群345/3=115分配给建筑物7,9,13

代码语言:javascript
运行
复制
df2

    p     b
0  75     3
1  75    17 
2  115    7  
3  115    9
4  115   13
5  177    4
6  267    2
EN

回答 2

Stack Overflow用户

发布于 2019-09-03 00:17:54

IIUC,您可以尝试合并b上的两个dfs,然后是stack()和一些清理,最后在p上分组并转换count,然后将p除以,以得到p上的除值。

代码语言:javascript
运行
复制
m=(df.merge(df1,on='b',how='left').set_index('p').stack().reset_index(name='b')
 .drop_duplicates().drop('level_1',1).sort_values('p'))
m.p=m.p/m.groupby('p')['p'].transform('count')

print(m.sort_index())

代码语言:javascript
运行
复制
       p     b
0   75.0   3.0
1   75.0  17.0
2  115.0   7.0
3  115.0   9.0
5  115.0  13.0
6  177.0   4.0
7  267.0   2.0
票数 1
EN

Stack Overflow用户

发布于 2019-09-03 02:59:21

使用pd.concat的另一种方式。之后,分别对b1p执行fillna。接下来,使用mean进行transform,并将已填充的b1分配给最终数据帧

代码语言:javascript
运行
复制
df2 = pd.concat([df, df1], sort=True).sort_values('b')
df2['b1'] = df2.b1.fillna(df2.b)
df2['p'] = df2.p.fillna(0)
df2.groupby('b').p.transform('mean').to_frame().assign(b=df2.b1).reset_index(drop=True)

Out[159]:
       p     b
0  267.0   2.0
1   75.0   3.0
2   75.0  17.0
3  177.0   4.0
4  115.0   7.0
5  115.0   9.0
6  115.0  13.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档