>

내가 가진 데이터에서 사람의 나이를 계산하려고합니다 :

Data columns in 'Person' Dataframe:
TodaysDate   non-null datetime64[ns]
YOB          non-null float64

따라서 데이터 프레임 내에 'Age'라는 새 열을 만들고 싶습니다. 지금까지 다음 코드가 있습니다.

Person['Age'] = map(sum, (Person.ix[0,'TodaysDate']).year, -(Person['YOB']))
TypeError: 'int' object is not iterable

도 시도했습니다 :

Person['Age'] = map((Person.ix[0,'TodaysDate']).year - Person['YOB'])
TypeError: map() must have at least two arguments.

다른 질문에 게시 된 몇 가지 방법을 시도했지만 아무 효과가없는 것 같습니다. 이 작업은 매우 간단 해 보이지만 작동 할 수는 없습니다.

지도 기능을 사용하여 날짜 시간 열 TodaysDate 를 빼는 방법에 대한 아이디어  플로트 열 YOB 에서   Age 에 가치를 넣어  기둥? 데이터 프레임의 모든 행에 대해이 작업을 수행하고 싶습니다.

감사합니다!

  • 답변 # 1

    데이터 :

    In [5]: df
    Out[5]:
        YOB
    0  1955
    1  1965
    2  1975
    3  1985
    
    

    당신은 여분의 열 TodaysDate 가 필요하지 않습니다  -동적으로 얻을 수 있습니다 :

    In [6]: df['Age'] = pd.datetime.now().year - df.YOB
    In [7]: df
    Out[7]:
        YOB  Age
    0  1955   62
    1  1965   52
    2  1975   42
    3  1985   32
    
    

    또는 DataFrame.eval () 메소드를 사용할 수도 있습니다 :

    In [16]: df
    Out[16]:
        YOB
    0  1955
    1  1965
    2  1975
    3  1985
    In [17]: df.eval("Age = @pd.datetime.now().year - YOB", inplace=True)
    In [18]: df
    Out[18]:
        YOB  Age
    0  1955   62
    1  1965   52
    2  1975   42
    3  1985   32
    
    

  • 답변 # 2

    이 답변은 주로 assign 의 홍보입니다 . 나는 assign 의 팬입니다  새로운 pd.DataFrame 를 반환하기 때문에  그것은 오래된 pd.DataFrame 의 사본입니다  추가 열이 포함되어 있습니다. 어떤 상황에서는 새로운 pd.DataFrame 를 반환  더 적절합니다. 구문이 깨끗하고 직관적이라고 생각합니다.

    또한 @MaxU의 답변을 완전히 찢어 냈으므로 계산과 관련하여 0 값을 추가했습니다.

    df.assign(Age=pd.datetime.now().year - df.YOB)
        YOB  Age
    0  1955   62
    1  1965   52
    2  1975   42
    3  1985   32
    
    

관련 자료

  • 이전 internet explorer - signalr - ie의 forever frame은 몇 분 동안 유휴 상태가되면 작동하지 않습니다
  • 다음 sql server 2005 - dateadd sql에 시간, 분, 초를 어떻게 추가합니까?