2017-01-09 5 views
2

3D 측정 데이터 (약 27k 행)가있는 판다 데이터 프레임이 있습니다. 나는 이미 3 개의 좌표 열 (x, y, z)으로 구성된 다중 색인을 만들었습니다. I는 상호의 값을 감산 할 다음 단계에서 sample data팬더 데이터 프레임 빼기 단면

: 여기

        Analog 1 
Position Y Position X Position Z   
    y0   x0   z0  value0 
    y0   x0   z1  value1 
    y0   x0   z2  value2 
    y0   x1   z0  value3 
    y0   x1   z1  value4 
    y0   x1   z2  value5 
    y1   x0   z0  value6 
    y1   x0   z1  value7 
    y1   x0   z2  value8 
    y1   x1   z0  value9 
    y1   x1   z1  value10 
    y1   x1   z2  value11 

은 예이다 : 데이터는 (Y 방향을 따라 복수의 XZ 평면들)처럼 보이는 다른 모든 xz 평면에서 y=y0의 섹션/슬라이스로 내 데이터를 정규화하십시오. 현재, 모든 행을 반복하여 수행합니다.

for row in data.itertuples(): 
    ind = row[0] 
    value = row[1] 
    ref = data["Analog 1"].ix[(y0, ind[1], ind[2])] 
    data["Analog 1"].ix[ind] = value - ref 

더 우아한 방법이 있습니까?

+0

이 너무입니다 질문은 대답하지 않은 채로 있지 않습니다 – EdChum

답변

3

관심의 행에서 모든 행을 뺄 sub를 호출 한 후 열로 인덱스 값을 복원하기 위해 IMO reset_index을에 쉬울 것 : 필터링이 DataFrame 그렇다면 반환 df[df['Position Y'] == -27.0] 것을 여기

In [65]: 
df = df.reset_index() 
df.sub(df[df['Position Y'] == -27.0].iloc[0], axis=1) 

Out[65]: 
    Position Y Position X Position Z Analog 1 
0   0.0   0.0   0.0  0.00 
1   0.5   0.0   0.0  0.00 
2   1.0   0.0   0.0  0.00 
3   1.5   0.0   0.0  0.00 
4   2.0   0.0   0.0  -0.02 

주 이것을 빼면 다른 모든 행에 대해 NaN이 제공되므로 iloc[0]을 사용하여 첫 번째 행과 유일한 행을 인덱싱하면 Series이 반환되므로 전체 df를 따라 브로드 캐스팅됩니다.

당신은 다시 나중에 인덱스 설정할 수 있습니다 필요한 경우 : 내 대답은 귀하의 질문에 당신이 그것을 받아 들일 수 내 대답의 왼쪽 상단에 빈 눈금이있을 것 해결하는 경우

In [80]: 
df = df.reset_index() 
df = df.sub(df[df['Position Y'] == -27.0].iloc[0], axis=1) 
df = df.set_index(df.columns[:3].tolist()) 
df 

Out[80]: 
            Analog 1 
Position Y Position X Position Z   
0.0  0.0  0.0    0.00 
0.5  0.0  0.0    0.00 
1.0  0.0  0.0    0.00 
1.5  0.0  0.0    0.00 
2.0  0.0  0.0   -0.02 
+0

인덱스 "Position Y"== -27 인 행이 하나있는 경우 접근 방식이됩니다. 하지만 저는 y 방향을 따라 많은 xz 평면을 가지고 있습니다. 나는 그것을 강조하도록 질문을 수정했다. – RaJa

+0

귀하의 질문을 현저하게 변경시켜 주어 죄송합니다.이 답변을 수락하고 새로운 질문을하셔야합니다. 게다가이 경우 마지막 df가 어떻게 될지 이해하지 못한다. 문제는 여기에 여러 행이있을 때 열과 인덱스를 정렬하는 문제와 빼는 방법이다. – EdChum