我有两个 Pandas 数据框如下:
df1_input = {'patient_id': [ABC], 'p1': [1], 'p2': [4], 'p3': [3]}
df1 = pd.DataFrame(df1_input, columns=['patient_id', 'p1', 'p2', 'p3'])
df1 看起来像:
patient_id p1 p2 p3
ABC 1 4 3
df2_input = {'feature': [p1, p2, p3], 'signals': [23, 45, 112]}
df2 = pd.DataFrame(df2_input, columns=['feature', 'signals']
df2 看起来像:
feature signals
p1 23
p2 45
p3 112
我想将 df1 中的每个数字除以 df2 中相应的特征,然后再次返回 df1。像这样:
patient_id p1 p2 p3
ABC 1/23 4/45 3/112
我试过:
final = pd.DataFrame(df1.values / df2.values, index=df1.index, columns=df2.index)
但是我得到:
ValueError: operands could not be broadcast together with shapes (1,4) (3,2)
问题是:我无法删除 patient_id 列!否则,我不会认出每个数字属于哪里。有任何想法吗?谢谢!
请您参考如下方法:
在 df1 上使用 loc 和 df2.feature 的列,并使用 df2.signals 的 ndarray 进行内联除法
df1.loc[:, df2.feature] /= df2.signals.values
Out[229]:
patient_id p1 p2 p3
0 ABC 0.043478 0.088889 0.026786
