我打算执行的操作是每当第3列中有一个'2'时,我们需要获取该条目并获取该条目的第1列值,然后减去上一个条目的第1列值,然后将结果乘以常数(例如5)。 例如:从图像中,我们在6:00的第3列中有一个“ 2”,并且该条目的第1列的值为0.011333,并取前一个列1的条目为0.008583,然后执行以下操作。 (0.011333-0.008583)* 5。 我每次在数据帧的第3列中收到“ 2”时都想执行此操作。请帮忙。我无法获得执行上述操作的写代码。
答案 0 :(得分:0)
这样的事情会做吗?
dataframe = [
[1,3,6,6,7],
[4,3,5,6,7],
[12,3,2,6,7],
[2,3,7,6,7],
[9,3,5,6,7],
[13,3,2,6,7]
]
constant = 5
list_of_outputs = []
for row in dataframe:
if row[2] == 2:
try:
output = (row[0] - prev_entry) * constant
list_of_outputs.append(output)
except:
print("No previous entry!")
prev_entry = row[0]
答案 1 :(得分:0)
也许question会为您提供帮助
我以SQL的方式思考,因此基本上,您将创建一个新列,其中填充了该行上方的值。
df['column1_lagged'] = df['column 1'].shift(1)
然后您创建另一个进行计算的列
constant = 5
df['calculation'] = (df['column 1'] - df['column1_lagged'])*constant
之后,您只需将数据帧切片为您的条件(第3列为'2')
condition = df['column 3'] == 2
df[condition]
答案 2 :(得分:0)
希望这会有所帮助: 您可以使用df.shift(1)获取上一行,而使用np.where获取满足您条件的行
df = pd.DataFrame([['ABC', 1, 0, 0],
['DEF', 2, 0, 0],
['GHI', 3, 0, 0],
['JKL', 4, 0, 2],
['MNO', 5, 0, 2],
['PQR', 6, 0, 2],
['STU', 7, 0, 0]],
columns=['Date & Time', 'column 1', 'column 2', 'column 3'])
df['new'] = np.where(df['column 3'] == 2, df['column 1'] - df['column 1'].shift(1) * 5, 0)
print(df)
输出:
Date & Time column 1 column 2 column 3 new
0 ABC 1 0 0 0.0
1 DEF 2 0 0 0.0
2 GHI 3 0 0 0.0
3 JKL 4 0 2 -11.0
4 MNO 5 0 2 -15.0
5 PQR 6 0 2 -19.0
6 STU 7 0 0 0.0
您可以根据需要更改计算。在else
部分中,您可以输入np.NaN
或任何其他计算。