获取熊猫中枢轴数据框的值的比率

时间:2019-03-19 05:00:28

标签: python-3.x pandas dataframe

我的一个数据框包含

WR          # WR
SP-RS-001    191
SP-RS-004    120
CO-CL-003    130
AN-AS-003    127

,另一个包含

C ID      SP-RS-001    SP-RS-004  CO-CL-003   AN-AS-003 ....
C-001        4            15         19         18      ....
C-002        7            11         10          0      ....
C-004        0             5          7         12      ....
C-005        1             1          4          2      ....

如何制作另一个数据框,使我获得第二个数据框的值与对应于它的第一个数据框的行的值的比率/百分比。因此,结果应类似于-

C ID      SP-RS-001      SP-RS-004    CO-CL-003    AN-AS-003      ....
C-001        4/191         15/120      19/130         18/127      ....
C-002        7/191         11/120      10/130          0/127      ....
C-004        0/191          5/120       7/130         12/127      ....
C-005        1/191          1/120       4/130          2/127      ....

我的意思是将上述值相除后的实际百分比值。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您也可以尝试做:

help_df=pd.concat([df.set_index('WR').T]*len(df1)).reset_index(drop=True)
df1.iloc[:,1:]=df1.iloc[:,1:].div(help_df)
print(df1)

    C ID  SP-RS-001  SP-RS-004  CO-CL-003  AN-AS-003
0  C-001  0.020942   0.125000   0.146154   0.141732 
1  C-002  0.036649   0.091667   0.076923   0.000000 
2  C-004  0.000000   0.041667   0.053846   0.094488 
3  C-005  0.005236   0.008333   0.030769   0.015748 

print(help_df)基本上是除法的辅助df:

   WR  SP-RS-001  SP-RS-004  CO-CL-003  AN-AS-003
    0   191        120        130        127      
    1   191        120        130        127      
    2   191        120        130        127      
    3   191        120        130        127   

答案 1 :(得分:1)

def check(text):
    l = []
    for i in text.index:
        #print(i)
        temp = df1[df1['WR'] == i].reset_index()
        if len(temp) >= 1:
            #print(temp['#WR'][0])
            l.append(str(text[i])+'/'+str(temp['#WR'][0]))
    return l 

df2[['SP-RS-001', 'SP-RS-004', 'CO-CL-003', 'AN-AS-003']] = df2.apply(check, axis=1)

main = df2[['SP-RS-001', 'SP-RS-004', 'CO-CL-003', 'AN-AS-003']].T.reset_index()
main.columns=['CID', 'SP-RS-001', 'SP-RS-004', 'CO-CL-003', 'AN-AS-003']

输出

         CID SP-RS-001 SP-RS-004 CO-CL-003 AN-AS-003
0  SP-RS-001     4/191    15/120    19/130    18/127
1  SP-RS-004     7/191    11/120    10/130     0/127
2  CO-CL-003     0/191     5/120     7/130    12/127
3  AN-AS-003     1/191     1/120     4/130     2/127

答案 2 :(得分:0)

您可以将WR设置为第一个数据帧的索引,将w.r.t设置为第二个数据帧的列名,您可以使用df.loc

来获取值
df.set_index('WR',inplace=True)

            #WR.1
WR  
SP-RS-001   191
SP-RS-004   120
CO-CL-003   130
AN-AS-003   127


df1
    C ID    SP-RS-001   SP-RS-004   CO-CL-003   AN-AS-003
0   C-001   4   15  19  18
1   C-002   7   11  10  0
2   C-004   0   5   7   12
3   C-005   1   1   4   2

df1.apply(lambda x: x/int(df.loc[x.name]) if x.name in df.index else x)


Out:

     C ID   SP-RS-001   SP-RS-004   CO-CL-003   AN-AS-003
0   C-001   0.020942    0.125000    0.146154    0.141732
1   C-002   0.036649    0.091667    0.076923    0.000000
2   C-004   0.000000    0.041667    0.053846    0.094488
3   C-005   0.005236    0.008333    0.030769    0.015748
相关问题