Skip to main content
 首页 » 编程设计

python之具有 2 个 df 的 Pandas 师

2025年05月04日21cmt

我想通过匹配他们的名字来划分2个dfs。例如,

df1 = pd.DataFrame({'名称':['xy-yz','xa-ab','yz-ijk','zb-ijk'],1:[1,2, 3,4],2:[1,2,1,2],3:[2,2,2,2]} )

df2 = pd.DataFrame({'Name2':['x','y','z','a'],1:[0,1,2,3],2:[ 1,2,3,4],3:[5,5,5,6]})

df1:

Name1    1   2   3 
xy-yz    1   1   2 
xa-ab    2   2   2 
yz-ijk   3   1   2 
zb-ijk   4   2   2 

df2:

Name2   1   2   3 
x       0   1   5 
y       1   2   5 
z       2   3   5 
a       3   4   6 

结果将是 df3:

Name1    1   2   3 
xy-yz    1   1   2 
x        0   1   5 
xy-yz        1   .4   <---(xy-yz)/x    
xa-ab    2   2   2 
x        0   1   5 
xa-ab        2   .4    <---(xa-ab)/x 
yz-ijk   3   1   2 
y        1   2   5 
yz-ijk   3   .5  .4    <---(yz-ijk)/y 
zb-ijk   4   2   2 
z        2   3   5 
zb-ijk   2   .67 .4    <---(zb-ijk)/z 

我会使用 concat,但我不确定如何通过将 Name2 映射到 Name1 中的第一个字母来进行除法。

谢谢!

请您参考如下方法:

我不知道你为什么需要它,但这回馈你所需要的

df2=df2.set_index('Name2') 
dfNew=df2.reindex(df1.Name1.str.split('-',expand=True)[0]) 
df1=df1.set_index('Name1') 
pd.concat([df1.reset_index(),dfNew.reset_index().rename(columns={0:'Name1'}),pd.DataFrame(df1.values/dfNew.values,columns=df1.columns).assign(Name1=df1.index)]).sort_index() 
 
 
Out[897]:  
          1         2    3  Name1 
0  1.000000  1.000000  2.0   x-yz 
0  0.000000  1.000000  5.0      x 
0       inf  1.000000  0.4   x-yz 
1  2.000000  2.000000  2.0   x-ab 
1  0.000000  1.000000  5.0      x 
1       inf  2.000000  0.4   x-ab 
2  3.000000  1.000000  2.0  y-ijk 
2  1.000000  2.000000  5.0      y 
2  3.000000  0.500000  0.4  y-ijk 
3  4.000000  2.000000  2.0  z-ijk 
3  2.000000  3.000000  5.0      z 
3  2.000000  0.666667  0.4  z-ijk