2017-10-26 23 views
1

:어떻게 같은 dataframe에서 다른 열을 기반으로 팬더의 dataframe의 값을 계산할 수 있습니다 나도 같은 dataframe에 다른 열에서 계산되는 판다의 dataframe의 값의 새 열 만들려고하고

df['ema_ideal'] = df['Adj Close'].ewm(span=df['ideal_moving_average'], min_periods=0, ignore_na=True).mean 

그러나, 나는 오류가 발생하고있다 : 나는 30에 span 세트, 또는 정수가있는 경우

ValueError: The truth of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any(), or a.all(). 

, 나는이 오류가 발생하지 않습니다. 또한 ideal_moving_average은 float 열입니다.

내 두 가지 질문은 다음과 같습니다.

왜 오류가 발생합니까? (내가 팬더 새로운 오전으로 subquestion -이 열이 dataframe 내에서 일련?)

은 어떻게 df['ema_ideal'] 열에 ideal_moving_average에서 열 값을 통합 할 수 있습니다

감사를 도움을!

편집 : 형용사 닫기 데이터를 보여주는 예, 나쁜 포맷에서 다른 dataframe에서 dataframe 열을 생성 전혀 문제가있다

Date    Open  High   Low  Close Adj Close                   
2017-01-03 225.039993 225.830002 223.880005 225.240005 222.073914 
2017-01-04 225.619995 226.750000 225.610001 226.580002 223.395081 
2017-01-05 226.270004 226.580002 225.479996 226.399994 223.217606 
2017-01-06 226.529999 227.750000 225.899994 227.210007 224.016220 
2017-01-09 226.910004 227.070007 226.419998 226.460007 223.276779 
2017-01-10 226.479996 227.449997 226.009995 226.460007 223.276779 
+0

예제 데이터가 있습니까? 'DataFrame.evm' 메서드의 첫 번째 인수로 Series를 전달하는 것처럼 보입니다. –

답변

0

궁금한 점이 있다면 span은 복수 값을 사용할 수 없다는 것입니다.이 값은 df['ideal_moving_average']을 전달하려고 할 때 발생했습니다. 대신 아래 행의 값을 span에 전달하여 줄 바꿈 코드를 사용했습니다.

df['30ema'] = df['Adj Close'].ewm(span=df.iloc[-1]['ideal_ma'], min_periods=0, ignore_na=True).mean() 

편집 : 누군가가 작동하지 않거나 도움을 더 좋은, 감사를 만들 수 있음을 보여줍니다 때까지 내가, 지금이 올바른 것으로 받아 들일 것입니다.

0

. 일반적으로

당신이 받고있는 오류는 등등 and, or, not 논리 fonctions으로 시리즈를 비교하려고 할 때이 오류가 반환되고, 완전히 다른 ...

이 오류를 피하기 위해 계열 요소를 현명하게 비교해야합니다. 예를 들어 and 대신 &을 사용하거나 not 대신 ~을 사용하거나 요소 비교를 위해 numpy를 사용해야합니다.

여기서 문제는 ema의 범위로 Serie를 사용하려고 시도하고 pandas ewma 함수가 정수를 범위로 허용한다는 것입니다.

예를 들어 가능한 모든 기간에 대해 ema를 계산 한 다음 데이터 프레임의 ema ideal 열로 설정 한 Serie로 다시 그룹화 할 수 있습니다.

1

나는 이런 식으로 뭔가가 당신을 위해 작동합니다 생각 :

DataFrame.applyaxis=1를 제공
df['ema_ideal'] = df.apply(lambda x: df['Adj Close'].ewm(span=x['ideal_moving_average'], min_periods=0, ignore_na=True).mean(), axis=1) 

는 당신이 필요로하는 현명한처럼 데이터 행에 액세스 할 수 있습니다.

+0

'axis = 1'과'lambda'는 정확히 무엇을합니까? 또한이 명령이 올바르게 작동하는지 확신 할 수 없지만 이동 평균은'span = 30'으로 생성 된 다른 광속보다 낮습니다. 또한'df [ 'ema_ideal']'많은 행의 EWM의 NaN

+0

업데이트 된 답변보기, 'Mean'은 누락되어 있으므로 Mean이 계산하는 값이 아니라 메서드 자체를 반환했습니다. 'lambda'와'axis = 1'에 관해서는 https://pandas.pydata.org/pandas-docs/stable/basics.html#row- 또는 -columnwise-function- 응용 프로그램 –

+0

흠, 그 중 하나가 작동하지 않는 것 :'ValueError : 전달 된 항목의 개수가 잘못됨 207, 배치가 1을 의미합니다 ', FYI'df ['ideal_moving_average ']'는 207 행을 가짐 – NaN