您需要通過set_index
得到所有字符串列索引,然後劃分:
df2 = df2.set_index('Col2')
df2.loc['Percent'] = df1.set_index('Col1').iloc[4].values/df2.iloc[4]
print (df2)
Val21 Val22
Col2
A 20.00 19.000000
B 35.00 11.000000
C 46.00 42.000000
D 31.00 53.000000
E 28.00 55.000000
Percent 0.25 0.109091
如果有多個字符串列使用col的subsets
對於分UMNS並添加子集輸出:
df2.loc['Percent'] = df1[['Val11','Val12']].iloc[4].values/df2[['Val21','Val22']].iloc[4]
print (df2)
Col2 Val21 Val22
0 A 20.00 19.000000
1 B 35.00 11.000000
2 C 46.00 42.000000
3 D 31.00 53.000000
4 E 28.00 55.000000
Percent NaN 0.25 0.109091
更通用的解決方案:
str_cols1 = ['Col1']
str_cols2 = ['Col2']
df2.loc['Percent'] = df1.drop(str_cols1, axis=1).iloc[4].values/
df2.drop(str_cols2, axis=1).iloc[4]
print (df2)
Col2 Val21 Val22
0 A 20.00 19.000000
1 B 35.00 11.000000
2 C 46.00 42.000000
3 D 31.00 53.000000
4 E 28.00 55.000000
Percent NaN 0.25 0.109091
,更好的解決方案與select_dtypes
:
df2.loc['Percent'] = df1.select_dtypes(['number']).iloc[4].values/
df2.select_dtypes(['number']).iloc[4]
print (df2)
Col2 Val21 Val22
0 A 20.00 19.000000
1 B 35.00 11.000000
2 C 46.00 42.000000
3 D 31.00 53.000000
4 E 28.00 55.000000
Percent NaN 0.25 0.109091
編輯的評論:
使用to_numeric
用於將非數字值替換爲NaN
:
df1_numeric = df1.apply(lambda x: pd.to_numeric(x, errors='coerce'))
df2_numeric = df2.apply(lambda x: pd.to_numeric(x, errors='coerce'))
df2.loc['Percent'] = df1_numeric.iloc[4].values/df2_numeric.iloc[4]
print (df2)
Col2 Val21 Val22
0 A 20.00 19
1 B 35.00 a
2 C 46.00 42
3 D 31.00 53
4 E 28.00 55
Percent NaN 0.25 0.109091
因爲這是我只用一個字符串列的例子。如果我有多個字符串列,這個解決方案將工作嗎? –
我添加另一種解決方案,請檢查它。 – jezrael
非常感謝。它運行良好。 –