2017-12-19 9 views
1

나는 이런 dataframe 있습니다팬더를 사용하여 각 행을 반복적으로 뺄셈 하시겠습니까?

 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 - 첫 번째 행)에서 나머지 값에서 2 행을 빼기 원하는 등등합니다.

a = 100 - df["abc"] 

를하지만 매번는 100에서이를 공제한다

사람이 그것을 할 수있는 올바른 방법을 제안 할 수 있습니다 :

나는 시도?

+0

예상 출력? –

+1

'100-df [ 'abc']. cumsum())'이 필요합니까? – jezrael

+1

@jezrael 그래, 나는 같은 대답에 도착했다. 나는 또한 루프를 작성하고 체크했다. 그것은 맞는 대답이다. –

답변

3

당신이 필요로하는 것 같다

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 
1

옵션 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