繁体   English   中英

迭代/切片数据帧并执行数学计算

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM