2016-07-06 2 views
1

다음 팬더 데이터 프레임이 있습니다.팬더 데이터 프레임의 모든 행 쌍 사이의 차이, 평균, 합계를 찾는 방법은 무엇입니까?

import pandas as pd 
df = pd.read_csv('filename.csv') 

print(df) 

    dog  A   B   C 
0  dog1 0.787575 0.159330 0.053095 
1  dog10 0.770698 0.169487 0.059815 
2  dog11 0.792689 0.152043 0.055268 
3  dog12 0.785066 0.160361 0.054573 
4  dog13 0.795455 0.150464 0.054081 
5  dog14 0.794873 0.150700 0.054426 
.. .... 
8  dog19 0.811585 0.140207 0.048208 
9  dog2 0.797202 0.152033 0.050765 
10 dog20 0.801607 0.145137 0.053256 
11 dog21 0.792689 0.152043 0.055268 
    .... 

나는 모든 행 사이에 A의 절대적인 차이를 찾고 싶습니다. 어떻게하면 데이터가 매우 빠르게 증가한다는 것을 명심하십시오.

df1 = df.set_index("dog") 

from itertools import combinations 
cc = list(combinations(df,2)) 

out = pd.DataFrame([df1.loc[c,:].sum() for c in cc], index=cc) 

그러나, 이것은 단지 합산된다

한 가지 방법은 "한 쌍"데이터 시도하는 것입니다합니다. 여러 작업을 어떻게 수행합니까?

답변

3

는 다음 dataframe을 고려

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'Dog': list('ABCDEFG'), 'A': range(7)})[['Dog', 'A']] 
df 

enter image description here

사용 NumPy와의 subtract.outer 기능은 다음 절대 값을.

stacked = df1.stack() 
pd.DataFrame({'Dogs': stacked.index.to_series(), 'Diff': stacked})[['Dogs', 'Diff']].reset_index(drop=True) 

enter image description here

+0

감사 :

enter image description here

df1 = pd.DataFrame(np.abs(np.subtract.outer(df.A, df.A)), df.Dog, df.Dog) df1 

조합 튜플의 목록을 얻을 수 있습니다. 예를 들어 (개 A, 개 A) = 0, (개 A, 개 B) = 1 등 어떻게 "쌍 형식"으로 만들겠습니까? – ShanZhengYang

+0

게시물이 업데이트되었습니다. – piRSquared

+1

@ShanZhengYang이 답변을 찾으면 만족스럽게 받아들입니다. 이것은 질문을 답변으로 표시하고 사람들이 당신의 미래의 질문에 답하도록 격려 할 것입니다. – limbo

관련 문제