按条件用与最后一行值的差异替换数据框中的值
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 语句。
希望对你有帮助谢谢!
我正在尝试用它与前一行值的差异来替换我的数据框中每个大于 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 语句。
希望对你有帮助谢谢!