2014-02-12 11 views
5

나는 applymap 메서드의 기능을 시험해보고 싶었습니다. Pandas DataFrame 개체입니다. 여기에 사용 사례는 다음과 같습니다팬더 DataFrame ApplyMap 메서드

하자 다음과 같이 내 DataFrame df1는 말 :

Age ID  Name 
0 27 101 John 
1 22 102 Bob 
2 19 103 Alok 
3 27 104 Tom 
4 32 105 Matt 
5 19 106 Steve 
6 5 107 Tom 
7 55 108 Dick 
8 67 109 Harry 

가 지금은 논리와 플래그 변수를 만들려면 해당 요소의 길이보다 작은 경우 2, 다음 플래그 = 1 else flag = 0.

이 요소를 실행하려면 applymap 메서드를 사용하고 싶었습니다. 다음과 같이 그에 대한 그래서 나는 사용자 정의 함수를 만들어 :

Age ID Name 
0 None None None 
1 None None None 
2 None None None 
3 None None None 
4 None None None 
5 None None None 
6 None None None 
7 None None None 
8 None None None 

을 대신 플래그 값 플래그 변수를 만드는 :

def f(x): 
    if len(str(x))>2: 
     df1['Flag']=1 
    else: 
     df1['Flag']=0 

그럼 내가 준 df1.applymap(f)을 달렸다. applymap을 사용하여 원하는 기능을 어떻게 얻을 수 있습니까?

사용자 정의 함수 내에서 DataFrame 변수 이름이나 pandas 문을 사용할 수 없습니까? 즉, df1['Flag']f()의 정의 내에서 유효합니까?

답변

8

함수 f(x)은 팬더에 특별한 것이 아닙니다. 이것은 단지 일반적인 파이썬 함수입니다. 따라서 범위가 f 인 유일한 데이터는 x입니다. df1의 다른 멤버는 사용할 수 없습니다.

FUNC : applymap 문서에서

def f(x): 
    if len(str(x)) <= 3: return 1 
    else: return 0 
: 기능

파이썬 기능은

그래서 당신이 시도 할 수있는 하나의 값에서 단일 값을 반환

각 요소에 대해 1/0 출력 적용 프레임 :

df1.applymap(f) 

>>> 
    Age ID Name 
0 1 1  0 
1 1 1  1 
2 1 1  0 
3 1 1  1 
4 1 1  0 
5 1 1  0 
6 1 1  1 
7 1 1  0 
8 1 1  0 

각 행에 또 다른 변수를 추가하는 결과를 사용하려면

df1['Flag'] = df1.applymap(f).all(axis=1).astype(bool) 

>>> df1 

    Age ID Name Flag 
0 27 101 John False 
1 22 102 Bob True 
2 19 103 Alok False 
3 27 104 Tom True 
4 32 105 Matt False 
5 19 106 Steve False 
6 5 107 Tom True 
7 55 108 Dick False 
8 67 109 Harry False 

은 또한으로 apply을 포함 https://stackoverflow.com/a/19798528/1643946, map을 확인 예를 들어, 한 줄에 하나 개의 값을, 필요 잘 applymap.

+0

감사합니다. 후속 조치. df1 [ 'Flag'] = df1.applymap (f) .sum (축 = 1) .astype (bool) 문에서 열을 합하면 첫 번째 행의 값은 2 (1 + 1) +0)? 그러면 그 불의는 진정한 의식이어야합니까? 그렇다면 틀린 이유는 무엇입니까? – Baktaawar

+0

예, 죄송합니다 -'all' 함수의 결과를 복사했지만'sum' 함수에 썼습니다 (bool (sum)은 좋은 예로없는 모든 행에 대해 True를 제공합니다). 이제 해결되었습니다. – Bonlenfum

+0

@Baktaawar 만약 당신이 대답을 받아 들일 수 있다면, "고마워요"외에도 문제가 해결 되었다면 좋을 것입니다! – Owen