我有一个熊猫数据框“ df”,其中一个名为“ Value”的列如下所示:
import pandas as pd
df = pd.DataFrame({'Value':[240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255]})
Value
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
我想做的是添加第二列“ NewValue”,这样我就得到了这样的列:
Value NewValue
240 7
241 8
242 9
243 10
244 11
245 12
246 13
247 14
248 15
249 0
250 1
251 2
252 3
253 4
254 5
255 6
第二列应包含一个从0到15的递增序列,其中变量zerovalue定义值0的(索引)位置.在上例中,zerovalue = 249.
我知道我可以添加一个新列并基于rowIndex更改行值,如下所示:
rowIndex = df.index[9]
df.loc[rowIndex, 'NewValue'] = 0
我如何添加第二个列,该列包含上面示例中的系列,并且定义零列位置的零值是可变的?
解决方法:
我将acumsort与cumsum一起使用,然后按索引分配值
s=df.Value.eq(249).cumsum()
df.loc[s.iloc[(-s).argsort()].index,'NewValue']=np.arange(len(df))
df
Out[134]:
Value NewValue
0 240 7
1 241 8
2 242 9
3 243 10
4 244 11
5 245 12
6 246 13
7 247 14
8 248 15
9 249 0
10 250 1
11 251 2
12 252 3
13 253 4
14 254 5
15 255 6