python - 특정 - 파이썬 열 추출




Python/Pandas에서 R/ifelse와 같은가요? 문자열 열을 비교 하시겠습니까? (2)

판다는 0.17.1 버전에서 잘 작동하기 때문에 마지막 판으로 업그레이드해야합니다.

샘플 (일치하는 경우 install_month 열의 첫 번째 값이 변경됨) :

print maupayment
  log_month  user_id install_month  payment
1   2013-06        1       2013-06        0
2   2013-06        2       2013-04        0
3   2013-06        3       2013-04    14994

print np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing')
['install' 'existing' 'existing']

내 목표는 두 열을 비교하고 결과 열을 추가하는 것입니다. R은 ifelse를 사용하지만 판다의 방법을 알아야합니다.

아르 자형

> head(mau.payment)
  log_month user_id install_month payment
1   2013-06       1       2013-04       0
2   2013-06       2       2013-04       0
3   2013-06       3       2013-04   14994

> mau.payment$user.type <-ifelse(mau.payment$install_month == mau.payment$log_month, "install", "existing")
> head(mau.payment)
  log_month user_id install_month payment user.type
1   2013-06       1       2013-04       0  existing
2   2013-06       2       2013-04       0  existing
3   2013-06       3       2013-04   14994  existing
4   2013-06       4       2013-04       0  existing
5   2013-06       6       2013-04       0  existing
6   2013-06       7       2013-04       0  existing

판다

>>> maupayment
user_id  log_month  install_month
1        2013-06    2013-04              0
         2013-07    2013-04              0
2        2013-06    2013-04              0
3        2013-06    2013-04          14994

몇 가지 사례를 시도했지만 작동하지 않았습니다. 그것은 문자열 비교가 작동하지 않는 것 같습니다.

>>>np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing')

TypeError: 'str' object cannot be interpreted as an integer 

제발 도와 주실 수 있나요?

판다와 numpy 버전.

>>> pd.version.version
'0.16.2'
>>> np.version.full_version
'1.9.2'

버전을 업데이트 한 후 작동했습니다!

>>> np.where(maupayment['log_month'] == maupayment['install_month'], 'install', 'existing')
array(['existing', 'install', 'existing', ..., 'install', 'install',
       'install'], 
      dtype='<U8')

하나의 옵션은 Pandas의 apply 함수 와 함께 익명 함수 를 사용하는 것입니다.

함수에서 일부 분기 논리를 설정합니다.

def if_this_else_that(x, list_of_checks, yes_label, no_label):
    if x in list_of_checks:
        res = yes_label
    else: 
        res = no_label
    return(res)

이것은 람다 (아래 참조)의 x , 찾고자하는 것의 목록 , yes 레이블no 레이블을 취합니다.

예를 들어 IMDB 데이터 세트 (imdb_df)를 살펴 보겠습니다.

... 그리고 영화가 성숙했는지 여부를 보여주는 "new_rating"이라는 새 열을 추가하고 싶습니다.

위의 내 분기 논리와 함께 팬더 적용 함수를 사용할 수 있습니다.

imdb_df['new_rating'] = imdb_df['Rated'].apply(lambda x: if_this_else_that(x, ['PG', 'PG-13'], 'not mature', 'mature'))

또한 이것을 다른 수표와 결합 해야 할 때가 있습니다 . 예를 들어, IMDB 데이터 세트의 일부 항목은 NaN 입니다. NaN과 성숙도 등급 을 다음과 같이 확인할 수 있습니다.

imdb_df['new_rating'] = imdb_df['Rated'].apply(lambda x: 'not provided' if x in ['nan'] else if_this_else_that(x, ['PG', 'PG-13'], 'not mature', 'mature'))

이 경우에는 내 NaN이 먼저 문자열로 변환되었지만 실제 NaN으로도이를 수행 할 수 있습니다.





numpy