我想通过匹配他们的名字来划分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
