按条件用与最后一行值的差异替换数据框中的值

Replace values in dataframe with difference to last row value by condition

我正在尝试用它与前一行值的差异来替换我的数据框中每个大于 1000 的值。

这是我尝试过的方式 pandas:

data_df.replace(data_df.where(data_df["value"] >= 1000), data_df["value"].diff(), inplace=True)

这不会导致错误,但数据帧中没有任何变化。我错过了什么?

您可以将 freq 设置为 1000 或您想要的任何间隔。我把它放在 10 处,以使示例更容易看到。基本上移动行,对于索引可以被频率整除的每一行,使用移动后的值,否则保持原样。

import pandas as pd 
import numpy as np

freq = 10
df = pd.DataFrame({'data':[x for x in range(30)]})
df['previous'] = df['data'].shift(1)

df['data'] = np.where((df.index % freq==0) & (df.index>0), df['data'] -df['previous'], df['data'])

df.drop(columns='previous', inplace=True)

输出

    data
0   0.0
1   1.0
2   2.0
3   3.0
4   4.0
5   5.0
6   6.0
7   7.0
8   8.0
9   9.0
10  1.0
11  11.0
12  12.0
13  13.0
14  14.0
15  15.0
16  16.0
17  17.0
18  18.0
19  19.0
20  1.0
21  21.0
22  22.0
23  23.0
24  24.0
25  25.0
26  26.0
27  27.0
28  28.0
29  29.0
import numpy as np
import pandas as pd

d = {'value': [1000, 200002,50004,600005], }
data_df = pd.DataFrame(data=d)

data_df["diff"] =  data_df["value"].diff()
data_df["value"] = np.where((data_df["value"]>10000) ,data_df["diff"],data_df["value"])

data_df.drop(columns='diff', inplace=True)

我引入一列“diff”来获取上一行的差异。 np.where 允许你实现 if else 语句。

希望对你有帮助谢谢!