我的一个数据框包含
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 ....
我的意思是将上述值相除后的实际百分比值。我怎样才能做到这一点?
答案 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