2015-02-05 6 views
0

여러 서적과 사이트를 검색해 본 결과 내가하는 일과 완전히 일치하는 것을 찾을 수 없습니다. 그래서 같은 데이터를 dataframe에서 항목 별 목록을 만들고 다시 싶습니다 :Python Pandas Dataframe : 열의 값을 사용하여 새로운 열 만들기

 A  B    A  B  C  D 
0  1  aa   0 1  aa 
1  2  bb   1 2  bb 
2  3  bb   2 3  bb aa 
3  3  aa  --\ 3 4  aa bb dd 
4  4  aa  --/ 4 5  cc 
5  4  bb 
6  4  dd 
7  5  cc 

나는, 스태킹, 그룹 실험을하지 언 스택 등하지만 원하는 결과를 생산하고있다 시도했습니다 아무것도했습니다. 명백하지 않은 경우, 저는 파이썬에 매우 익숙합니다. 솔루션은 훌륭 하겠지만 따라야 할 프로세스에 대한 이해가 완벽 할 것입니다.

미리 감사드립니다.

답변

0

팬더를 사용하면 모든 결과를 쿼리 할 수 ​​있습니다. 여기서 A = 4입니다.

근본적이지만 일하는 방법은 다양한 인덱스 값을 반복하고 모든 '유사'결과를 숫자 배열로 수집하여이를 새로운 데이터 프레임으로 변환하는 것입니다.

l= [0]*df['A'].max() 
for item in xrange(df['A'].max()): 
    l[item] = df.loc[df['A'].isin(item)] 

df = pd.DataFrame(l) 
# or something of the sort 

나는 희망이 도움이 (실제로 일이 다시 작성해야합니다) :

의사 코드는 내 예를 설명한다. 댓글에서

업데이트 :

animal_list=[] 

for animal in ['cat','dog'...]: 
    newdf=df[[x.is('%s'%animal) for x in df['A']]] 

    body=[animal]  
    for item in newdf['B'] 
     body.append(item) 

    animal_list.append(body) 

df=pandas.DataFrame(animal_list) 
+0

덕분에 user2589273 ... 내가 내 예를 충분히 특정하지 않았다 두려워. 두 열의 실제 데이터는 문자열로 구성되며이 문자열을 시도 할 때 문자열을 곱하려고 시도하는 것에 대해 불평합니다. 이해를 돕기 위해, 첫 번째 라인은 무엇을하고 있습니까? – Velcro

+0

df = df.convert_objects (convert_numeric = True)를 사용하면 문자열을 데이터 프레임의 부동 소수점으로 변환 할 수 있습니다. 또는 구체적으로 df [ 'A'] = df [ 'A']. convert_objects (convert_numeric = True). 내 첫 번째 라인은 0 값의 빈 배열을 만드는 것입니다. 만약 당신이 값이 순차적이거나 갭을 가지고 있는지 모른다면 ... – user2589273

+0

또한 max의 내 사용이 정확하지 않을 가능성이 있음을 깨달았습니다 - 지금 편집 대답 – user2589273

0

신속하고 더러운 방법 문자열과 함께 작동합니다. 필요에 따라 열 명명을 사용자 정의하십시오.

data = {'A': [1, 2, 3, 3, 4, 4, 4, 5], 
     'B': ['aa', 'bb', 'bb', 'aa', 'aa', 'bb', 'dd', 'cc']} 
df = pd.DataFrame(data) 

maxlen = df.A.value_counts().values[0] # this helps with creating 
            # lists of same size 

newdata = {} 
for n, gdf in df.groupby('A'): 
    newdata[n]= list(gdf.B.values) + [''] * (maxlen - len(gdf.B)) 

# recreate DF with Col 'A' as index; experiment with other orientations 
newdf = pd.DataFrame.from_dict(newdict, orient='index') 

# customize this section 
newdf.columns = list('BCD') 
newdf['A'] = newdf.index 
newdf.index = range(len(newdf)) 
newdf = newdf.reindex_axis(list('ABCD'), axis=1) # to set the desired order 

print newdf 

결과는 다음과 같습니다

 
    A B C D 
0 1 aa   
1 2 bb   
2 3 bb aa  
3 4 aa bb dd 
4 5 cc   
관련 문제