[英]Python Create Column in Pandas Data Frame That Matches Row for Row Values Found / Not-Found in Existing Column
[英]Matching a data frame row (pandas) to a separate data frame row and performing a calculation if the first column matches
新手 python/coder 試圖使數據記錄器的下載和計算過程更順暢,作為一個副項目。 無論如何,我有兩個數據框。 第一個是“數據”,其中包含以下內容(為簡單起見縮短了行數):
Logger Name Date and Time Battery Temp(C) Sensor Reading(dg) Sensor Temp(C) Array #
0 TDX 10/1/2021 13:35 2.93 15.59 8772.737 14.5 833
1 TDX 10/1/2021 13:36 2.93 15.59 8773.426 14.5 834
2 TDX 10/1/2021 13:36 2.93 15.59 8773.570 14.5 835
3 TDX 10/1/2021 13:37 2.93 15.59 8773.793 14.5 836
第二個是“param”,它的參數包含我用來進行計算的值:
Transducer_ID elevation_tom elevation_toc elevation_ground elevation_tos calculation gage_factor xd_zero_reading thermal_factor xd_temp_at_zero_reading piezo_elev piezo_downhole_depth
0 TDX NaN NaN 1000 NaN linear -0.04135 9138 0.003119 24.8 1600 400
1 Test NaN NaN 1000 NaN linear -0.18320 8997 -0.170100 22.6 800 200
現在我希望代碼能夠做的是在“數據”中創建一個名為“線性 P”的新列,該列基於使用來自兩個數據幀的變量的計算進行填充:[digits_zero_digits - Sensor Reading(dg)] * abs(量具系數)。 現在,如果“param”只有一個傳感器 ID 和與“data”相同的行數,這不是問題,但實際上它有很多具有不同 ID 的行。
所以我的問題是這樣的。 實現我的目標的最佳方法是什么? 是在列上循環還是使用 pandas 庫更有效?
提前致謝!
編輯:我要找的output就是這個
Logger Name Date and Time Battery Voltage(v) Internal Temp(C) Sensor Reading(dg) Sensor Temp(C) Array # Linear P
0 TDX 10/1/2021 13:35 2.93 15.59 8772.737 14.5 833 15.103625
1 TDX 10/1/2021 13:36 2.93 15.59 8773.426 14.5 834 15.075135
2 TDX 10/1/2021 13:36 2.93 15.59 8773.570 14.5 835 15.069181
3 TDX 10/1/2021 13:37 2.93 15.59 8773.793 14.5 836 15.059959
更有效的方法是根據我的經驗:
df["Linear P"] = df["Sensor Reading(dg)"] *... ).
這是我的過程的一個例子:
import pandas as pd
df1 = pd.DataFrame({'Names': ['a', 'a'],
'var1': [35, 15,],
'var2': [15, 40]})
df2 = pd.DataFrame({'Names1': ['a', 'E'],
'var3': [35, 15,],
'var4': [15, 40]})
final_df = df1.merge(df2, left_on='Names', right_on='Names1', how='left' )
final_df["Linear P"] = final_df["var3"] * final_df["var2"] - abs(final_df["var2"])
print(final_df)
只是想出了一種看起來非常有效的方法。 我只是刪除了不需要的“param”中的數據:
z = data.iloc[0,0]
param = param[param.Transducer_ID == z]
過濾數據后,我只從參數中提取所需的值:
x = piezo_param.iloc[0, 7]
y = piezo_param.iloc[0, 6]
並執行計算:
data['Linear P'] = (x - data['Sensor Reading(dg)']) * abs(y)
讓我知道這是否是完成工作的最佳方式!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.