2017-09-15 1 views
1

분석 된 뉴스 기사와 기사를 참조하는 각 행 및 해당 기사에 대한 정보 (예 : 톤)가있는 데이터 프레임이 있습니다. 해당 df의 한 열에는 해당 아티클에 언급 된 위치의 FIPS 국가 코드 목록이 포함되어 있습니다.Pandas 행 분리 목록의 열

이 국가 코드를 "추출"하여 각 언급 된 위치에 해당 위치가 참조 된 원래 행의 다른 열과 함께 자체 행이있는 데이터 프레임을 얻고 싶습니다. (여러 행이 있습니다. 동일한 정보가 있지만 동일한 위치에 다른 위치가 표시 될 수 있기 때문에 위치는 다릅니다.

나는 이와 같은 것을 시도했지만, iterrows()는 느리게 악명이 높기 때문에 이것을 수행하는 데 더 빠르고 효율적인 방법이 있습니까? 고마워요.

  • '이벤트'위치
  • 포함 된 열입니다 'event_cols가'나는 새 안양에서 유지하려면 원래 안양에서 열 수 있습니다.
  • 'df_events는'I가 그룹 DataFramegroupby()와, apply 조합 및 lambda 기능 목록을 분해 한 다음, 인덱스를 리셋 레벨 드롭 것이다
for i, row in df.iterrows(): 
    for location in df.events.loc[i]: 
    try: 
     df_storage = pd.DataFrame(row[event_cols]).T 
     df_storage['loc'] = location 
     df_events = df_events.append(df_storage) 
    except ValueError as e: 
     continue 

답변

1

새 데이터 프레임을 인 그 결과로 DataFrame을 정리하기 위해 생성 된 열. 일반적으로

df_events = df.groupby(['event_col1', 'event_col2', 'event_col3'])['events']\ 
       .apply(lambda x: pd.DataFrame(x.values[0]))\ 
       .reset_index().drop('level_3', axis = 1) 

, 난 항상 종종 훨씬 더 빨리 각 행의 반복보다는 때문에, 대부분의 다른 방법 전에 apply()를 사용하는 방법을 찾아보십시오. df.itertuples()에서 행 `데이터 = [] : 놀랍게도 빨리 이루어

+1

내가 itertuples()로 전환하는 제 문제에 대한 해결책을 발견 하였다 행 위치 [14] : # 정의 튜플에있는 위치의 위치 data.append (행 [0:13] + (위치,))' –

+0

내 솔루션이 작동하지 않았습니까? 한 번 더 해보십시오. 더 효율적이고 컴팩트해질 수 있습니다. –