使用pandas对每行进行迭代减法?

2024-04-19 10:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

        abc  
9       32.242063  
3       24.419279  
8       25.464011  
6       25.029761  
10      18.851918  
2       26.027582  
1       27.885187  
4       20.141231  
5       31.179138  
7       22.893074  
11      31.640625  
0       33.150434 

我想从100中减去第一行,然后从(100-第一行)的剩余值中减去第二行,依此类推。你知道吗

我试过:

a = 100 - df["abc"]

但每次都是从100中减去。你知道吗

有人能提出正确的方法吗?你知道吗


Tags: 数据方法dfabc
2条回答

选项1
np.cumsum-

df["abc"] = 100 - np.cumsum(df.abc.values)
df
           abc
9    67.757937
3    43.338658
8    17.874647
6    -7.155114
10  -26.007032
2   -52.034614
1   -79.919801
4  -100.061032
5  -131.240170
7  -154.133244
11 -185.773869
0  -218.924303

这比另一个答案中的pd.Series.cumsum快。你知道吗


选项2
循环当量,cythonized。你知道吗

%load_ext Cython

%%cython
def foo(r):
    x = [100 - r[0]]
    for i in r[1:]:
        x.append(x[-1] - i)

    return x

df['abc'] = foo(df['abc'])
df

           abc
9    66.849566
3    42.430287
8    16.966276
6    -8.063485
10  -26.915403
2   -52.942985
1   -80.828172
4  -100.969403
5  -132.148541
7  -155.041615
11 -186.682240
0  -219.832674

看来你需要:

df['new'] = 100 - df['abc'].cumsum()
print (df)
          abc         new
9   32.242063   67.757937
3   24.419279   43.338658
8   25.464011   17.874647
6   25.029761   -7.155114
10  18.851918  -26.007032
2   26.027582  -52.034614
1   27.885187  -79.919801
4   20.141231 -100.061032
5   31.179138 -131.240170
7   22.893074 -154.133244
11  31.640625 -185.773869
0   33.150434 -218.924303

相关问题 更多 >