고유 한 GEO_ID와 각 GEO_ID에 대한 별도의 열 (6 개 중 1 개)에 속성 (FTYPE)이 있고 각 FTYPE에 대한 관련 길이가있는 데이터 프레임이 있습니다.Python Pandas : 병합, 조인, 연결
df
FID GEO_ID FTYPE Length_km
0 1400000US06001400100 428 3.291467766
1 1400000US06001400100 460 7.566487367
2 1400000US06001401700 460 0.262190266
3 1400000US06001401700 566 10.49899202
4 1400000US06001403300 428 0.138171389
5 1400000US06001403300 558 0.532913513
는 어떻게 각 행은 고유 GEO_ID을 만들 수 FTYPE_Length 및 6 새 열 (즉, 행이 FTYPE가있는 경우 표시하기 위해 1과 0) FTYPE 6 새 열을 어떻게해야합니까?
import pandas as pd
fname = "filename.csv"
df = pd.read_csv(fname)
nhd = [334, 336, 420, 428, 460, 558, 556]
df1 = df.loc[df['FTYPE']==nhd[0]]
df2 = df.loc[df['FTYPE']==nhd[1]]
df3 = df.loc[df['FTYPE']==nhd[2]]
df4 = df.loc[df['FTYPE']==nhd[3]]
df5 = df.loc[df['FTYPE']==nhd[4]]
df6 = df.loc[df['FTYPE']==nhd[5]]
df7 = df.loc[df['FTYPE']==nhd[6]]
df12 = df1.merge(df2, how='left', left_on='GEO_ID', right_on='GEO_ID')
df23 = df12.merge(df3,how='left', left_on='GEO_ID', right_on='GEO_ID')
df34 = df23.merge(df4,how='left', left_on='GEO_ID', right_on='GEO_ID')
df45 = df34.merge(df5,how='left', left_on='GEO_ID', right_on='GEO_ID')
df56 = df45.merge(df6,how='left', left_on='GEO_ID', right_on='GEO_ID')
df67 = df56.merge(df7,how='left', left_on='GEO_ID', right_on='GEO_ID')
cols = [0,4,7,10,13,16,19]
df67.drop(df67.columns[cols],axis=1,inplace=True)
df67.columns =['GEO_ID','334','len_334','336','len_336','420','len_420','428','len_428','460','len_460','558','len_558','566','len_566']
이 같은 일을
FID GEO_ID FTYPE_428 FTYPE_428_length FTYPE_460 FTYPE_460_length
0 1400000US06001400100 1 3.291467766 1 7.566487367
지금까지 내가 무엇을 시도하는 것은 :
나는 나의 새로운 dataframe (6 FTYPE-S와)과 같은 구조를 갖고 싶어 그러나이 방법은 처음 두 개의 FTYPE이있는 행으로 줄이기 때문에 문제가됩니다. 한 번에 여러 열을 병합하는 방법이 있습니까?그것의 아마 쉽게는 루프를 작성하고 각 행을 가서 이런 식으로 값을 입력하는 조건을 사용 :
nhd = [334, 336, 420, 428, 460, 558, 556]
for x in nhd:
df[str(x)] = None
df["length_"+str(x)] = None
df.head()
for geoid in df["GEO_ID"]:
#print geoid
for x in nhd:
df.ix[(df['FTYPE']==x) & (df['GEO_ID'] == geoid)][str(nhd)] = 1
을하지만 너무 많은 시간이 걸리고 아마 한 라이너에있다 팬더도 똑같이해야합니다.
이 문제에 대한 도움이 필요하십니까?
감사합니다, 솔로몬
대 (5 별개의 FTYPEs이있는, 사용자의 입력 데이터를 사용하여) 저를 제공
: 그래서 내가 좋아하는 뭔가를 할 수 있습니다! 빠른 답변 주셔서 감사합니다. 정보가 중복되어 길이 열을 삭제할 수 있습니다. – solonome