拥有2 dfs的熊猫分区

泰勒·NG

我想通过匹配它们的名称来划分2个df。例如,

df1 = pd.DataFrame({'Name':['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的第一个字母来进行除法。

谢谢!

cs95

建立 -

df1 = df1.set_index('Name')
df2 = df2.set_index('Name2')
df1

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

df2

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

df2根据的第一个字母检索相关行df1

i = df2.loc[df1.index.str[0]]
i

       1  2  3
Name2         
x      0  1  5
x      0  1  5
y      1  2  5
z      2  3  5

执行除法并重置索引。

j = (df1.set_index(i.index) / i).set_index(df1.index)
j
               1         2    3
Name                           
xy-yz        inf  1.000000  0.4
xa-ab        inf  2.000000  0.4
yz-ijk  3.000000  0.500000  0.4
zb-ijk  2.000000  0.666667  0.4

连接结果。

pd.concat([df1, i, j])

               1         2    3
xy-yz   1.000000  1.000000  2.0
xa-ab   2.000000  2.000000  2.0
yz-ijk  3.000000  1.000000  2.0
zb-ijk  4.000000  2.000000  2.0
x       0.000000  1.000000  5.0
x       0.000000  1.000000  5.0
y       1.000000  2.000000  5.0
z       2.000000  3.000000  5.0
xy-yz        inf  1.000000  0.4
xa-ab        inf  2.000000  0.4
yz-ijk  3.000000  0.500000  0.4
zb-ijk  2.000000  0.666667  0.4

如果要屏蔽非实数值,请np.isfinite此处再次使用jon-

j  = j[np.isfinite(j)].fillna('')
j

        1         2    3
Name                    
xy-yz      1.000000  0.4
xa-ab      2.000000  0.4
yz-ijk  3  0.500000  0.4
zb-ijk  2  0.666667  0.4

使用这个 j作为参数来串联之后。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章