2017-03-16 9 views
-1

오픈 데이터 세트 this에서 연습 중입니다. 사용 dataframes의 기본 설명 :팬더/파이썬 데이터 프레임 - 병합 논리에서 손실 됨

데이터 가용성에 대한 정보를 포함하는 하나있다

: dataavail

Timestamp Availability 
201605252300 True 
201605252315 False 
201605252015 True 

, 건은 실제 데이터 weatherdata

SquareID Timestamp Precipitation 
25  201605252300 1 

을 포함 하나있다을하는 경우가 아니요 비가 이 아니고 weatherdata.Precipitation 인 표시가 인 경우는 0이지만 s weatherdata에서 누락되었습니다. 그러나 누락 된 모든 데이터가 강수량을 의미하는 것은 아니며 기술적 인 실패를 의미 할 수도 있습니다. 그것이 dataavail 인 경우입니다. Timestampdata 인 경우 AvailabilityFalse입니다. 기술적 인 문제가 있었고 데이터가 없음을 의미합니다. data에서 TimestampAvailabilityTrue 경우, 그 침전 실제로 내가 옵션의 전체 스펙트럼, 다음과 같습니다 즉 하나를 설명하는 dataframe을 가질 수 있도록이 두 dataframes을 결합하려는 0

이었다 의미 :

이제
Timestamp Availability Precipitation 
201605252300 True   1   #if the availability is True, and there's rain, data can be pulled from weatherdata 
201605252315 False  NaN   #if there's a technical issue, data can stay NaN for further imputation 
201605252015 True   0   #if the data's availability is True, but there's no entry fot it in weatherdata, it should be 0 

이를 달성하기 위해, 나는 documentation이에 따라, 나의 이해에서

precip_alldata = pd.merge(weatherdata, dataavail, on=['Timestamp'], how='right') 

로 병합하기 위해 노력하고있어

를 잘해야합니다 (: 오른쪽 외부 조인 SQL)이

을 제외한 모든 가능한 타임 스탬프에 대한 가용성 데이터있다 dataavail에 있기 때문에 즉, 내가 원하는 무엇 오른쪽 프레임에서 전용 키를 사용합니다. 또한 이것이 NaN을 True로 사용할 수있는 경우 0으로 대체하지 않는다는 것도 이해합니다. 그러나 출력 precip_alldata은 어떤 행도 가지고 있지 않습니다. 여기서 AvailabilityTrue입니다. 그러나 PrecipitationNaN입니다. 그러면 내 생각에 뭔가 이상하게 여겨 질 것입니다. 원시 데이터 세트를 보면 강수량이없는 경우를 분명히 볼 수 있으며 AvaiabilityTrue입니다. 그래서 내 출력 나의 이해

Timestamp Availability Precipitation 
201605252300 True   1 
201605252315 False  Nan 

같이 보입니다/내가 원하는 첫 번째 단계에서

Timestamp Availability Precipitation 
201605252300 True   1 
201605252315 False  NaN 
201605252015 True   NaN 

입니다. 내 생각에 범인을 지적 해 주시겠습니까? 고맙습니다!

+0

아무것도 변화합니까? – Khris

+0

@Khris - 강수량이 두 데이터 세트에 존재하지 않으므로이 방법은 작동하지 않습니다. –

답변

-1

는 다음과 같은 시도 :

precip_alldata = pd.merge(dataavail, weatherdata, how='left') 
precip_alldata[['TimeStamp', 'Availability', 'Precipitation']] 

왼쪽을 사용하면 왼쪽 dataframe (dataavail)에서 모든 행을 줄 것이다 가입 할 수 있습니다.

출력 :

당신은`=에 [ '타임 스탬프', '강수'] '와 병합을 수행 할 때
  Timestamp Availability Precipitation 
0 201605252300   True   1.0 
1 201605252315  False   NaN 
2 201605252015   True   NaN 
+0

'precip_alldata = pd.merge (dataavail, weatherdata, how = 'left')'는 사실상'precip_alldata = pd.merge (weatherdata, dataavail, how = 'right')'와 동일합니다. 그럼에도 불구하고, 나는 노력했고 동일한 출력을 내었다. –

+2

당신이보고있는 복사/붙여 넣기 결과물을 산출 한 위의 정확한 데이터 세트를 복제했습니다. 이것이 작동하지 않으면 다른 일이 진행되고 있습니다. –