Python 基于数据帧中的另一个值划分数据帧中的值

Python 基于数据帧中的另一个值划分数据帧中的值,python,dataframe,pandas-groupby,Python,Dataframe,Pandas Groupby,我试图在数据帧中创建一个列,它是基于数据帧中的另一个值划分值的结果 这意味着我想除以SCI值,它的腐蚀温度值在19.5和20.5之间,链测长度相等 我创建了一个小数据框,可以帮助解决这个问题 data = {'Chainage':[10,20,30,10,20,30,10,20,30], 'SCI':[123, 45, 19, 18, 36, 125, 54, 78,85], 'Temp':[20.4,35,16,22,20.1,19.8,18,21,28]} df = pd.DataFram

我试图在数据帧中创建一个列,它是基于数据帧中的另一个值划分值的结果

这意味着我想除以SCI值,它的腐蚀温度值在19.5和20.5之间,链测长度相等

我创建了一个小数据框,可以帮助解决这个问题

data = {'Chainage':[10,20,30,10,20,30,10,20,30], 'SCI':[123, 45, 19, 18, 36, 125, 54, 78,85], 'Temp':[20.4,35,16,22,20.1,19.8,18,21,28]} 
df = pd.DataFrame(data)
数据帧:

   Chainage  SCI  Temp
0        10  123  20.4
1        20   45  35.0
2        30   19  16.0
3        10   18  22.0
4        20   36  20.1
5        30  125  19.8
6        10   54  18.0
7        20   78  21.0
8        30   85  28.0
这是最终的结果。 按链测长度分组,然后使用Temp介于19.5和20.5之间的SCI值与组中的其他值进行划分。 我试图说明如下:

   Chainage  SCI  Temp  f
0        10  123  20.4  123/123 = 1
3        10   18  22.0  123/18 = 6.8
6        10   54  18.0  123/54 = 2.2
7        20   78  21.0  36/78 = 0.4
1        20   45  35.0  36/45 = 0.8
4        20   36  20.1  36/36 = 1
2        30   19  16.0  6.6
5        30  125  19.8  1
8        30   85  28.0  1.5
我一直在尝试使用,但在添加额外调节时遇到了问题。
非常感谢您的帮助。

我认为您需要将其分解为几个步骤

  • 计算你的“基本温度”
  • 将基本temp合并到主数据帧中
  • 进行分组
  • 清理多余的柱子
  • 看起来是这样的:

       Chainage  Temp
    0        10  20.4
    1        20  20.1
    2        30  19.8
    
    导入熊猫
    数据={
    “链测长度”:[10,20,30,10,20,30,10,20,30],
    "SCI":[123,45,19,18,36,125,54,78,85],,
    “温度”:[20.4,35,16,22,20.1,19.8,18,21,28]
    }
    df=熊猫。数据帧(数据)
    基本温度=(
    测向位置[df['Temp']介于(19.5,20.5)之间]
    .groupby('chaineage',as_index=False)
    .first()
    .drop(列=['SCI'])
    )
    
    base\u temp
    数据帧如下所示:

       Chainage  Temp
    0        10  20.4
    1        20  20.1
    2        30  19.8
    
    我们查询出了温度在正确范围内的行,但随后执行了group by/first以确保没有任何重复的链测长度值

    现在我们可以做其他一切:

    
    结果=(
    合并(base_temp,on='chaineage',how='left',后缀=('','u base'))
    .assign(f=lambda df:df['Temp_base']/df['Temp'])
    .drop(列=['Temp_base'])
    )
    
    这给了你:

       Chainage  SCI  Temp         f
    0        10  123  20.4  1.000000
    1        20   45  35.0  0.574286
    2        30   19  16.0  1.237500
    3        10   18  22.0  0.927273
    4        20   36  20.1  1.000000
    5        30  125  19.8  1.000000
    6        10   54  18.0  1.133333
    7        20   78  21.0  0.957143
    8        30   85  28.0  0.707143