동일한 파라미터를 참조하지만 길이가 다른 두 개의 개별 DataFrame
열에 시계열 데이터가 있습니다.두 데이터 프레임 열의 데이터를 하나의 열로 결합
데이터가 한 열에 만 존재하는 날짜에이 값을 새 열에 넣길 바랍니다. 양쪽 열에 대한 항목이있는 날짜에는 평균값을 갖고 싶습니다. (datetime 값인 인덱스를 사용하여 가입하고 싶습니다.)
누군가 내 두 열을 결합 할 수있는 방법을 제안 할 수 있습니까? 감사.
편집 2 : 두 열의 데이터를 병합해야하는 코드를 작성했지만 첫 번째 df에 값이 있지만 두 번째 df가있는 행에서 생성 된 색인을 사용하여 새 값을 설정하려고하면 KeyError
이 표시됩니다. 하지 않습니다.
def merge_func(df):
null_index = df[(df['DOC_mg/L'].isnull() == False) & (df['TOC_mg/L'].isnull() == True)].index
df['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L']
notnull_index = df[(df['DOC_mg/L'].isnull() == True) & (df['TOC_mg/L'].isnull() == False)].index
df['DOC_mg/L'][notnull_index] = df[notnull_index]['TOC_mg/L']
df.insert(len(df.columns), 'Mean_mg/L', 0.0)
df['Mean_mg/L'] = (df['DOC_mg/L'] + df['TOC_mg/L'])/2
return df
merge_func(sve)
을 그리고 여기 오류입니다 : 여기 코드는 당신이 가까운
KeyError: "['2004-01-14T01:00:00.000000000+0100' '2004-03-04T01:00:00.000000000+0100'\n '2004-03-30T02:00:00.000000000+0200' '2004-04-12T02:00:00.000000000+0200'\n '2004-04-15T02:00:00.000000000+0200' '2004-04-17T02:00:00.000000000+0200'\n '2004-04-19T02:00:00.000000000+0200' '2004-04-20T02:00:00.000000000+0200'\n '2004-04-22T02:00:00.000000000+0200' '2004-04-26T02:00:00.000000000+0200'\n '2004-04-28T02:00:00.000000000+0200' '2004-04-30T02:00:00.000000000+0200'\n '2004-05-05T02:00:00.000000000+0200' '2004-05-07T02:00:00.000000000+0200'\n '2004-05-10T02:00:00.000000000+0200' '2004-05-13T02:00:00.000000000+0200'\n '2004-05-17T02:00:00.000000000+0200' '2004-05-20T02:00:00.000000000+0200'\n '2004-05-24T02:00:00.000000000+0200' '2004-05-28T02:00:00.000000000+0200'\n '2004-06-04T02:00:00.000000000+0200' '2004-06-10T02:00:00.000000000+0200'\n '2004-08-27T02:00:00.000000000+0200' '2004-10-06T02:00:00.000000000+0200'\n '2004-11-02T01:00:00.000000000+0100' '2004-12-08T01:00:00.000000000+0100'\n '2011-02-21T01:00:00.000000000+0100' '2011-03-21T01:00:00.000000000+0100'\n '2011-04-04T02:00:00.000000000+0200' '2011-04-11T02:00:00.000000000+0200'\n '2011-04-14T02:00:00.000000000+0200' '2011-04-18T02:00:00.000000000+0200'\n '2011-04-21T02:00:00.000000000+0200' '2011-04-25T02:00:00.000000000+0200'\n '2011-05-02T02:00:00.000000000+0200' '2011-05-09T02:00:00.000000000+0200'\n '2011-05-23T02:00:00.000000000+0200' '2011-06-07T02:00:00.000000000+0200'\n '2011-06-21T02:00:00.000000000+0200' '2011-07-04T02:00:00.000000000+0200'\n '2011-07-18T02:00:00.000000000+0200' '2011-08-31T02:00:00.000000000+0200'\n '2011-09-13T02:00:00.000000000+0200' '2011-09-28T02:00:00.000000000+0200'\n '2011-10-10T02:00:00.000000000+0200' '2011-10-25T02:00:00.000000000+0200'\n '2011-11-08T01:00:00.000000000+0100' '2011-11-28T01:00:00.000000000+0100'\n '2011-12-20T01:00:00.000000000+0100' '2012-01-19T01:00:00.000000000+0100'\n '2012-02-14T01:00:00.000000000+0100' '2012-03-13T01:00:00.000000000+0100'\n '2012-03-27T02:00:00.000000000+0200' '2012-04-02T02:00:00.000000000+0200'\n '2012-04-10T02:00:00.000000000+0200' '2012-04-17T02:00:00.000000000+0200'\n '2012-04-26T02:00:00.000000000+0200' '2012-04-30T02:00:00.000000000+0200'\n '2012-05-03T02:00:00.000000000+0200' '2012-05-07T02:00:00.000000000+0200'\n '2012-05-10T02:00:00.000000000+0200' '2012-05-14T02:00:00.000000000+0200'\n '2012-05-22T02:00:00.000000000+0200' '2012-06-05T02:00:00.000000000+0200'\n '2012-06-19T02:00:00.000000000+0200' '2012-07-03T02:00:00.000000000+0200'\n '2012-07-17T02:00:00.000000000+0200' '2012-07-31T02:00:00.000000000+0200'\n '2012-08-14T02:00:00.000000000+0200' '2012-08-28T02:00:00.000000000+0200'\n '2012-09-11T02:00:00.000000000+0200' '2012-09-25T02:00:00.000000000+0200'\n '2012-10-10T02:00:00.000000000+0200' '2012-10-24T02:00:00.000000000+0200'\n '2012-11-21T01:00:00.000000000+0100' '2012-12-18T01:00:00.000000000+0100'] not in index"
[유사한 이름의 열의 경우 접미사를 추가해야하는 경우를 대비하여]이 답변을 살펴보십시오. "http://stackoverflow.com/questions/23906835/pandas-merging-join-dataframes/23921662#23921662" 이제 여기에서 읽어보십시오. "http://pandas.pydata.org/pandas-docs/stable/indexing.html?highlight=loc#indexing-and-selecting-data"특정 색인을 선택하는 방법을 알아내는 방법. 병합 후에 수행 할 작업은 df [(df [ 'colA'] .isnull() == True) 및 (df [ 'colB']의 변형을 사용하여 값이 누락 된 행을 찾습니다. = False)], 누락 된 경우 값을 설정하십시오. 그런 다음 colA와 colB에서 평균을 취하십시오. –
의견을 보내 주셔서 감사합니다. @ RyanG. 내 열은 이미 동일한'DataFrame'에 있고 색인 (날짜 시간 임)을 공유합니다. 두 행에 값이 포함되어 있으면 빈 행을 찾거나 평균을 취하는 함수를 작성했지만 새로운 값을 할당하려고하면 구문 오류가 발생합니다.원래 질문에 새 코드를 추가했습니다. – Bprodz
루프가 완료된 후 데이터 프레임을 반환합니다. 귀하의 구현이 마무리되었지만 아래의 답변에서이 문제를 해결할 수있는 또 다른 방법이 있습니다. –