2017-12-21 7 views
1

저는 팬더가있는 멍청한 사람입니다. apply을 사용하여 마스크 된 데이터 프레임의 일부분에 대한 계산과 수정을 시도하고 있습니다. 작업하고자하는 부분은 마스크에 의해 정의되고 마스크되지 않은 값은 수정하고 싶지 않습니다.마스크 된 데이터 프레임의 내부 연산

문제는 마스크 된 데이터 프레임에서 apply 호출의 결과를 원래의 데이터 프레임 (또는 복사본)에 속하는 곳으로 되돌려 놓을 수있는 적절한 방법이 무엇인지 모르는 것입니다.

import pandas as pd 
import numpy as np 


def make_df(): 
    np.random.seed(4) 
    df = pd.DataFrame(np.random.randn(5, 2),columns=["A","B"]) 
    return df 

df = make_df() 
mask = (df["A"]>0) 

print(df) 

      A   B 
0 0.050562 0.499951 
1 -0.995909 0.693599 
2 -0.418302 -1.584577 
3 -0.647707 0.598575 
4 0.332250 -1.147477 

예상되는 결과가 이것이다 :

여기

, 나는 마스크를 사용하여 부정적인 A 열에서 모든 값을 만들기 위해 노력하고 적용됩니다 내가 고민하고있는 무슨의 장난감 예이다 내가 일하는 것이 기대 무엇
  A   B 
0 -0.050562 0.499951 
1 -0.995909 0.693599 
2 -0.418302 -1.584577 
3 -0.647707 0.598575 
4 -0.332250 -1.147477 

이 있었다 :

df = make_df() 

df[mask]["A"] = df[mask]["A"].apply(lambda v: -v) 
print(df) 

      A   B 
0 0.050562 0.499951 
1 -0.995909 0.693599 
2 -0.418302 -1.584577 
3 -0.647707 0.598575 
4 0.332250 -1.147477 

그러나 위스콘신 실패 th 팬더는 df[mask]["A"] 사본이보기가 아니므로이 수정 사항이 df에 영향을주지 않습니다.

+0

, 'A']'? –

+1

나는 경고가 loc를 사용하는 것도 제안한다고 생각한다. 너 그거 해봤 니? – ayhan

+0

고마워, 그게 내가 필요로 한거야. 나는 판다 색인 생성과 모든 'loc''iloc' at와'iat'를 사용하는 데 정말로 어려움을 겪고있다. – jadsq

답변

3

봅니다 loc[]를 사용 :

In [11]: df.loc[mask, 'A'] *= -1 

In [12]: df 
Out[12]: 
      A   B 
0 -0.050562 0.499951 
1 -0.995909 0.693599 
2 -0.418302 -1.584577 
3 -0.647707 0.598575 
4 -0.332250 -1.147477 
0

당신은 시도 할 수 있습니다 : (EDIT)`df.loc [마스크, 'A'] = -df.loc [마스크 뭐가 잘못

df.loc[df['A'] > 0,'A'] = -df.A