Python 数据帧之间的点分割忽略其中一个数据帧的第一列
我有两个数据帧,如下所示:Python 数据帧之间的点分割忽略其中一个数据帧的第一列,python,pandas,dataframe,division,Python,Pandas,Dataframe,Division,我有两个数据帧,如下所示: 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
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']
feature signals
p1 23
p2 45
p3 112
df2看起来像:
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']
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)
问题是:我无法摆脱“患者id”列!否则,我将无法识别每个数字所属的位置。有什么想法吗?谢谢 也许你可以尝试设置索引?这也适用于多个功能/信号
df1.set_index('patient_id', inplace=True)
df2.set_index('feature', inplace=True)
df1
df2
然后:
甚至更好,比如在耶斯雷尔和迪夫:
决赛
也许你可以试着设置索引?这也适用于多个功能/信号
df1.set_index('patient_id', inplace=True)
df2.set_index('feature', inplace=True)
df1
df2
然后:
甚至更好,比如在耶斯雷尔和迪夫:
决赛
输出
输出
用于将列名称与要素列值对齐:
df2 = df1.set_index('patient_id').div(df2.set_index('feature')['signals']).reset_index()
print (df2)
patient_id p1 p2 p3
0 ABC 0.043478 0.088889 0.026786
用于将列名称与要素列值对齐:
df2 = df1.set_index('patient_id').div(df2.set_index('feature')['signals']).reset_index()
print (df2)
patient_id p1 p2 p3
0 ABC 0.043478 0.088889 0.026786
将df1上的loc与df2.feature列一起使用,并与df2.feature的ndarray进行内联除法
将df1上的loc与df2.feature列一起使用,并与df2.feature的ndarray进行内联除法
您可以设置索引:df1.set_index'patient_id',inplace=True和df2.set_index'feature',inplace=True您可以设置索引:df1.set_index'patient_id',inplace=True和df2.set_index'feature',inplace=Truei走得有点长,就像这种方法一样
temp_df1 = df1.T.reset_index().rename({'index':'feature'},axis=1)
##temp_df1
feature 0
0 patient_id ABC
1 p1 1
2 p2 4
3 p3 3
temp_df1.merge(df2, how='outer').set_index('feature').apply(lambda x: x[0]/x['signals'] if str(x['signals']) !='nan' else x,axis=1).drop('signals',axis=1).T
feature patient_id p1 p2 p3
0 ABC 0.0434783 0.0888889 0.0267857
df2 = df1.set_index('patient_id').div(df2.set_index('feature')['signals']).reset_index()
print (df2)
patient_id p1 p2 p3
0 ABC 0.043478 0.088889 0.026786
df1.loc[:, df2.feature] /= df2.signals.values
Out[229]:
patient_id p1 p2 p3
0 ABC 0.043478 0.088889 0.026786