2017-03-07 14 views
0

내 dataframe은 다음과 같습니다 다른 컬럼의 헤더를 기반으로 계산을 수행 할 열을 선택 : 내가 하나의 요소이다 (1, 2)과 열 머리글, 같은 같은 튜플과 열 머리글이팬더는 : 조건부

(1, 2) (1, 3) (1, 4) (1, 5) (1, 6) (1, 7) (1, 8) (1, 9) (1, 10) (1, 11) ... 2 3 4 5 6 7 8 9 10 11 
0 0 1 0 1 1 1 1 0 1 0 ... 0.612544 0.727393 0.366578 0.631451 0.722980 0.772853 0.964982 0.549801 0.406692 0.798083 
1 0 0 0 0 0 0 0 0 0 0 ... 0.583228 0.698729 0.343934 0.602037 0.694230 0.745422 0.954682 0.521298 0.382381 0.771640 
2 1 0 0 1 0 1 1 0 0 0 ... 0.481291 0.593353 0.271028 0.498949 0.588807 0.641602 0.901779 0.424495 0.303309 0.669657 
3 1 1 0 1 0 1 1 0 0 1 ... 0.583228 0.698729 0.343934 0.602037 0.694230 0.745422 0.954682 0.521298 0.382381 0.771640 
4 0 0 0 1 1 1 1 1 1 1 ... 0.612544 0.727393 0.366578 0.631451 0.722980 0.772853 0.964982 0.549801 0.406692 0.798083 

1. 해당 튜플의 요소가있는 열을 기반으로 튜플 열을 계산하려고합니다. 예를 들어, 튜플 (1, 2)을 사용하면 열 12을 검색하고 함께 곱한 다음 (1, 2) 열에서 결과를 뺍니다.

내가 생각 솔루션은 하나의 요소를 포함하는 열 (예 : 1 또는 2)에서 첫 번째 계산을 수행 (55) 새 열을 만든 다음 .where()를 사용하여 신원 경기의 일종을했다 및 all() 문 그러나 이것은 튜플 열에서 직접 계산을 수행하는 것이 아니라 전체적으로 다른 데이터 세트를 작성하기 때문에 오히려 계산 상 비효율적 인 것으로 보입니다. 나는 이것에 대해 어떻게 갈 것인가? 이 빠르지 만 여기 어디에() 필요없이 솔루션의 경우

답변

2

확실하지 않음/모든()

import pandas as pd 


# create some sample data 
arr = [[1, 2, 3, 4, 5, 6, 7], 
     [7, 6, 5, 4, 3, 2, 1]] 
df = pd.DataFrame(arr, columns=[('a', 'b'), ('c','d'), ('a', 'd'), 'a', 'b', 'c', 'd']) 

# get all tuple headers 
tuple_columns = [col for col in df.columns if isinstance(col, tuple)] 

# put the results into a list of series and concat into a DataFrame 
results = pd.concat([df[col] - df[col[0]] * df[col[1]] for col in tuple_columns], axis=1) 

# rename the columns 
results.columns = tuple_columns