다른 열의 요소를 사용하여 한 열의 목록에서 인덱스를 반환하는 목록을 포함한 두 개의 팬더 열에 적용하는 방법은 무엇입니까?

모간 마조 우치

"a"및 "b"열이있는 pandas Dataframe이 있습니다. 열 a에는 열 값으로 값 목록이 있고 열 "b"에는 열 "a"에 나타날 수있는 단일 값이있는 목록이 있습니다. apply를 사용하여 a 열 값에 나타나는 b의 요소 위치 값이있는 열 a 및 b를 기반으로 새 열 c를 만들고 싶습니다. (c : (a에서 b의 인덱스) +1) 열 b는 항상 하나의 요소가 있거나 전혀 요소가없는 목록이고, 열 a는 길이에 관계없이 가능하지만 비어있는 경우 b 열도 비어 있습니다. 열 b 요소는 열 a에있을 것으로 예상되며 열 a에서 첫 번째 항목의 위치를 ​​찾고 싶습니다.

a                         b                   c 


['1', '2', '5']          ['2']                2

['2','3','4']            ['4']                3
['2','3','4']            []                   0
[]                       []                   0
...

잘 작동하는 for 루프를 작성했지만 꽤 느립니다.

for i in range(0,len(df)):

    if len(df['a'][i])!=0:
        df['c'][i]=df['a'][i].index(*df['b'][i])+1 
    else:
        df['c'][i]=0

하지만 더 빨리 적용하기 위해 사용하고 싶습니다. 다음은 작동하지 않습니다. 어떤 생각이나 제안을 주시면 대단히 감사하겠습니다.

df['c']=df['a'].apply(df['a'].index(*df['b']))

AMC

먼저 .NET을 사용하는 기본 방법 .apply()입니다.

import pandas as pd
import numpy as np

list_a = [['1', '2', '5'], ['2', '3', '4'], ['2', '3', '4'], []]
list_b = [['2'], ['4'], [], []]

df_1 = pd.DataFrame(data=zip(list_a, list_b), columns=['a', 'b'])

df_1['a'] = df_1['a'].map(lambda x: x if x else np.NaN)
df_1['b'] = df_1['b'].map(lambda x: x[0] if x else np.NaN)
#df_1['b'] = df_1['b'].map(lambda x: next(iter(x), np.NaN))


def calc_c(curr_row: pd.Series) -> int:
    if curr_row['a'] is np.NaN or curr_row['b'] is np.NaN:
        return 0
    else:
        return curr_row['a'].index(curr_row['b'])


df_1['c'] = df_1[['a', 'b']].apply(func=calc_c, axis=1)

df_1 결과:

    a                  b    c
--  ---------------  ---  ---
 0  ['1', '2', '5']    2    1
 1  ['2', '3', '4']    4    2
 2  ['2', '3', '4']  nan    0
 3  nan              nan    0

빈 목록을로 대체 NaN했는데 훨씬 더 관용적이고 실용적입니다.

이것은 분명히 이상적인 해결책이 아니며 다른 것을 찾으려고 노력할 것입니다. 분명히 귀하의 프로그램과 DataFrame에 대한 정보가 많을수록 좋습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관