다중 레벨 인덱스 데이터 프레임의 모든 행에 대해 복잡한 df 작업을 수행하는 방법은 무엇입니까?

굴 자르

이것은 입력 데이터 프레임에 일반 인덱스가 아닌 다중 인덱스가있는 경우에 대한 후속 질문 입니다 .

foo단일 인덱스 df를 가져 와서 2 레벨 인덱스의 레벨 0을 행 단위로보고 얻은 행인 모든 df에 대해 수행하는 복잡한 작업을 수행하고 싶습니다 .

다중 색인을 갖도록 증가 된 연결된 질문에서 동일한 입력을 가져옵니다.

i0 i1   0 1   2 
0  0    0 "5" a 
   1    1 "4" b
1  2    2 "3" c
   3    3 "2" d 
   4    4 "1" e 
   5    5 "0" f

그래서 공연 foo하고 싶습니다

i1     0 1   2
 0      0 "5" a
 1      1 "4" b

그리고

i1     0 1   2
 2     2 "3" c
 3     3 "2" d
 4     4 "1" e
 5     5 "0" f

열이 foo반환되는 항목에 따라 다른 데이터 프레임을 가져 옵니다.

foo참조 된 질문에있는 것과 같은 함수의 경우

foo 돌아올 것이다

i0 i1 res
0  0  "05,24"
   1  "05,24"
1  2  "43,62"
   3  "43,62"
   4  "81,100"
   5  "81,100"

내 시도 :

def row_reduce(col0, col1):
    return str(2 * col0) + str(col1)

def col_reduce(rows_data):
    return ",".join(rows_data)

def foo(df):
    res = (df.apply(lambda x: row_reduce(x[0], x[1]), axis=1)
                   .groupby(df.index // 2)
                   .transform(col_reduce))
    return res


def _perform_operation_on_all_main_ind(df: pd.DataFrame, op: Callable[[pd.DataFrame], pd.DataFrame]):
    return df.groupby(level=0).apply(op)

_perform_operation_on_all_main_ind(df, foo)

그러면 TypeError: cannot perform __floordiv__ with this index type: MultiIndex다중 인덱스가 단일 인덱스로 축소되지 않았 음을 의미합니다.

아마도 내가 그것을 거꾸로 가지고 있고 올바른 방향을 보여줄 수 있습니다.

이스 르엘

foo길이에 따라 도우미 배열로 정수 나누기 기능을 변경할 수 있으며 DataFrame, 마지막 추가 group_keys=False는 다음의 첫 번째 수준이 중복되지 않도록합니다 MultiIndex.

def foo(df):
    res = (df.apply(lambda x: row_reduce(x[0], x[1]), axis=1)
                   .groupby(np.arange(len(df)) // 2)
                   .transform(col_reduce))
    return res


df = df.groupby(level=0, group_keys=False).apply(foo)
print (df)
i0  i1
0   0      05,24
    1      05,24
1   2      43,62
    3      43,62
    4     81,100
    5     81,100
dtype: object

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관