python数据帧行:如果行+ n>的值;行的值,将变量设置为A

时间:2016-02-22 14:52:36

标签: python pandas labels

我正在使用pandas数据帧。我尝试创建一个新列,数据['标签'],其中包含由列数据中行i和行i + n之间的值变化确定的标签['差异'] ,对于数据帧的整个长度。

我想象下面的一些内容,但是这会给我带来错误:

for i in range(len(data['diff'])-1):
    data.loc[data['diff'][i] >= data['diff'][i+n], 'Labels'] = 'A'
    data.loc[data['diff'][i] < data['diff'][i+n], 'Labels'] = 'B'

示例输出:

index diff    label
9     117.32   B
10    108.32   A
11    125.36   A 
12    127.36   A
13    139.28   A
14    141.22   A
15    147.89   A
16    153.89   B
17    153.89   B
18    156.87   B
19    168.84   B
20    161.04   B
21    172.04   B
24    175.16   B
22    164.04   B
23    164.16   B
27    175.16   B
25    149.16   A

1 个答案:

答案 0 :(得分:0)

如果我理解正确,如果以下任何一行中的值更高,您希望将标签设置为A

您可以使用cummax获取剩余行的最大值。但是,您需要先恢复索引,否则cummax将返回前面行的最大值。你可以用.iloc[::-1]

来做到这一点
df['following_max'] = df['diff'].iloc[::-1].cummax().iloc[::-1]

每当以下最大值大于当前值时,请应用标签A

df['Labels'] = np.where(df['diff'] < df['following_max'], 'A', 'B')