Python 基于数据帧中的另一个值划分数据帧中的值
我试图在数据帧中创建一个列,它是基于数据帧中的另一个值划分值的结果 这意味着我想除以SCI值,它的腐蚀温度值在19.5和20.5之间,链测长度相等 我创建了一个小数据框,可以帮助解决这个问题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
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
我一直在尝试使用,但在添加额外调节时遇到了问题。
非常感谢您的帮助。我认为您需要将其分解为几个步骤
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