[英]Iterating / Slicing over a dataframe and performing mathematical calculations
我打算执行的操作是每当第 3 列中有一个“2”时,我们需要取该条目并取该条目的第 1 列值并减去前一个条目的第 1 列值,然后将结果相乘由一个常数整数(比如 5)。 例如:从图像中,我们在 6:00 的第 3 列中有一个 '2' 并且该条目的第 1 列的值为 0.011333 并取前一个第 1 列条目 0.008583 并执行以下操作。 (0.011333 - 0.008583)* 5. 每次当我们在数据帧的第 3 列中收到“2”时,我都想执行此操作。 请帮忙。 我无法获得执行上述操作的写入代码。
这样的事情可以吗?
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]
或许这个问题对你有帮助
我认为以 SQL 方式,所以基本上你将创建一个新列,其中填充来自其上方行的值。
df['column1_lagged'] = df['column 1'].shift(1)
然后创建另一列进行计算
constant = 5
df['calculation'] = (df['column 1'] - df['column1_lagged'])*constant
之后,您只需将数据框切片到您的条件(第 3 列带有 '2's)
condition = df['column 3'] == 2
df[condition]
希望这会有所帮助:您可以使用 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
或任何其他计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.