这是我的DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'a': [98, 97, 100, 101, 103, 110, 108, 109, 130, 135],
'b': [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
'c': [np.nan, np.nan, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0],
'd': [92, 92, 92, 92, 92, 92, 92, 92, 92, 92],
}
)
这是期望的输出结果,我想要创建列 x
:
a b c d x
0 98 3 NaN 92 92
1 97 3 NaN 92 92
2 100 3 1.0 92 94
3 101 3 1.0 92 94
4 103 3 1.0 92 94
5 110 3 2.0 92 104
6 108 3 2.0 92 104
7 109 3 2.0 92 104
8 130 3 3.0 92 124
9 135 3 3.0 92 124
步骤如下:
a) 当 c
列不重复时,计算 df['x'] = df.a - (df.b * 2)
b) 如果 df.c
等于 np.nan
,则 df['x'] = df.d
例如:
c
列中第一个新值出现在第2行。因此,df['x'] = 100 - (3 * 2)
结果为94,直到 c
列出现新的值(在第5行)。对于第5行,df['x'] = 110 - (3 * 2)
结果为104。以此类推。
这是我尝试的方法:
df['x'] = df.a - (df.b * 2)
df.loc[df.c.isna(), 'x'] = df.d
df['x'] = df.x.cummax()