pandas 使用差值1更新系列值

brccelvz  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个特定的系列在 Dataframe 上。

df=pd.DataFrame()
df['yMax'] = [127, 300, 300, 322, 322, 322, 322, 344, 344, 344, 366, 366, 367, 367, 367, 388, 388, 388, 388, 389, 389, 402, 403, 403, 403]

对于彼此非常接近的值,比如相差1的值,我想通过加1或减1来消除这个差,以得到相同的数字。
因此,例如,结果列表将变为:

df['yMax'] = [127, 300, 300, 322, 322, 322, 322, 344, 344, 344, 367, 367, 367, 367, 367, 389, 389, 389, 389, 389, 389, 403, 403, 403, 403]

我知道我们可以很容易地用df.diff()求出相邻值之间的差。

0       NaN
1     173.0
2       0.0
3      22.0
4       0.0
5       0.0
8       0.0
6      22.0
7       0.0
9       0.0
10     22.0
11      0.0
12      1.0
13      0.0
14      0.0
15     21.0
16      0.0
17      0.0
20      0.0
18      1.0
19      0.0
21     13.0
22      1.0
23      0.0
24      0.0
Name: yMax, dtype: float64

但是我应该如何执行转换呢?

kknvjkwl

kknvjkwl1#

import pandas as pd
df=pd.DataFrame({'yMax':[127, 300, 300, 322, 322, 322, 322, 344, 344, 344, 366, 366, 367, 367, 367, 388, 388, 388, 388, 389, 389, 402, 403, 403, 403]})

如果连续的数字差为1,则将紧邻的连续数字上移。按原始数字分组,在调整后的列中选取最大值。代码如下

df =df.assign(new_yMax=np.where(df['yMax'].diff(-1)==-1, df['yMax'].shift(-1),df['yMax']))

df =df.assign(new_yMax=df.groupby('yMax')['new_yMax'].transform('max'))

df

相关问题