Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧之间的点分割忽略其中一个数据帧的第一列_Python_Pandas_Dataframe_Division - Fatal编程技术网

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