如何使用熊猫将数据帧除以从另一个数据帧获得的标量值

时间:2019-12-20 02:34:43

标签: python pandas dataframe

我有一个简单的问题。我有一个像这样的数据框

  Column_4 Column_4
0     Data     Data
1   102832    79639
2    50034    21058
3    38230    18963
4    34503    14216

我想要做的是将每列中的值除以从另一个数据帧(例如,此数据)派生的标量值。

          0         1
0  103000.0     500.0

这就是我想发生的事情:

    Column_4           Column_4
0     Data               Data
1   102832/103000.0     79639/500.0
2    50034/103000.0     21058/500.0
3    38230/103000.0     18963/500.0
4    34503/103000.0     14216/500.0

我知道您可以将一个数据帧除以标量值,甚至将数据帧除以其他数据帧中的值(通过使用索引来匹配它们);但是,我还没有找到一种方法来将数据框的一列除以标量值,该标量值是使用上述示例中的熊猫从另一个数据框获得的。

编辑: 我的列(数据)中有一个字符串,因此已将其删除。这是新的数据框。

  Column_4 Column_4 
1   102832   79639   
2    50034   21058    
3    38230   18963   
4    34503   14216     
5    34219   11450    

4 个答案:

答案 0 :(得分:1)

您可以将第二个数据帧转换为列表并进行常规分割(大熊猫会将该分割广播到每一列)

# test data
import pandas as pd
df1 = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
df2 = pd.DataFrame({'c':[7], 'd':[8]})

#df1
#   a  b
#0  1  4
#1  2  5
#2  3  6

#df2
#   c  d
#0  7  8

res = df1[['a','b']]/df2.loc[0,['c','d']].tolist()

print(res)

#          a      b
#0  0.142857  0.500
#1  0.285714  0.625
#2  0.428571  0.750

答案 1 :(得分:1)

如果第二个df中只有一行:

df1 = pd.DataFrame({"col1":["data",100,200,300,400],
                    "col2":["data",200,300,400,500]})

df2 = pd.DataFrame({"col1":[100],
                    "col2":[200]})

print (df1.iloc[1:].astype(int)/df2.values)

   col1  col2
0   1.0   1.0
1   2.0   1.5
2   3.0   2.0
3   4.0   2.5

答案 2 :(得分:1)

尝试一下:

import pandas as pd
import numpy as np

df1 = pd.DataFrame([[102832, 79639], [50034, 21058], [38230, 18963], [34503, 14216]], columns=['A', 'B'])
df1

    A       B
0   102832  79639
1   50034   21058
2   38230   18963
3   34503   14216

df2 = pd.DataFrame([[103000.0, 500.0]])
df2

           0        1
0   103000.0    500.0

两个表中的列名必须相同

df1 / pd.DataFrame(np.repeat(df2.values, df1.shape[0], axis=0), columns=['A', 'B'])

    A           B
0   0.998369    159.278
1   0.485767    42.116
2   0.371165    37.926
3   0.334981    28.432

答案 3 :(得分:1)

设置数据后,您需要这样做:

df4['Column_4'][1:].astype(int) / df5['0'][0]                                                                                                                                        
Out[363]: 
1    0.998369
2    0.485767
3    0.371165
4    0.334981