팬더 적용 함수에서 행의 색인을 얻는 것
전체에 적용되는 함수의 행 인덱스에 액세스하려고 합니다.DataFrame
팬더에서.이런 게 있어요.
df = pandas.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
>>> df
a b c
0 1 2 3
1 4 5 6
주어진 행으로 요소에 액세스하는 함수를 정의합니다.
def rowFunc(row):
return row['a'] + row['b'] * row['c']
다음과 같이 적용할 수 있습니다.
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
대단해!이제 인덱스를 내 함수에 통합하려면 어떻게 해야 합니까?여기서 지정된 행의 색인DataFrame
추가하기 전에d
되지요Index([u'a', u'b', u'c', u'd'], dtype='object')
0과 1을 원합니다.그래서 그냥 접속할 수 없어요.row.index
.
인덱스를 저장하는 테이블에 임시 열을 만들 수 있지만, 행 객체에 저장되어 있는지 궁금합니다.
이 경우 인덱스에 액세스하려면name
속성:
In [182]:
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
def rowFunc(row):
return row['a'] + row['b'] * row['c']
def rowIndex(row):
return row.name
df['d'] = df.apply(rowFunc, axis=1)
df['rowIndex'] = df.apply(rowIndex, axis=1)
df
Out[182]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
이것이 실제로 실행하려고 하는 것이라면, 다음의 조작이 가능하고, 훨씬 고속인 것에 주의해 주세요.
In [198]:
df['d'] = df['a'] + df['b'] * df['c']
df
Out[198]:
a b c d
0 1 2 3 7
1 4 5 6 34
In [199]:
%timeit df['a'] + df['b'] * df['c']
%timeit df.apply(rowIndex, axis=1)
10000 loops, best of 3: 163 µs per loop
1000 loops, best of 3: 286 µs per loop
편집
3년 이상 지난 후 이 질문을 보면 다음과 같은 것을 할 수 있습니다.
In[15]:
df['d'],df['rowIndex'] = df['a'] + df['b'] * df['c'], df.index
df
Out[15]:
a b c d rowIndex
0 1 2 3 7 0
1 4 5 6 34 1
하지만 이만큼 사소한 일이 아니라고 가정하면rowFunc
는 실제로 동작하고 있기 때문에 벡터화된 함수를 사용하여 df 인덱스에 대해 사용할 필요가 있습니다.
In[16]:
df['newCol'] = df['a'] + df['b'] + df['c'] + df.index
df
Out[16]:
a b c d rowIndex newCol
0 1 2 3 7 0 6
1 4 5 6 34 1 16
둘 중 하나: #1. withrow.name
내부apply(..., axis=1)
호출:
df = pandas.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'], index=['x','y'])
a b c
x 1 2 3
y 4 5 6
df.apply(lambda row: row.name, axis=1)
x x
y y
#2. 와 함께iterrows()
(표준)
DataFrame.iterrows()를 사용하면 행에 걸쳐 반복하여 해당 인덱스에 액세스할 수 있습니다.
for idx, row in df.iterrows():
...
첫 번째 질문에 답하려면: 예, 에서 행의 인덱스 값에 액세스할 수 있습니다.apply()
. 키 아래에 있습니다.name
를 지정할 필요가 있습니다.axis=1
람다는 열의 열이 아닌 행의 열을 처리하기 때문입니다.
동작 예(팬더 0.23.4):
>>> import pandas as pd
>>> df = pd.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
>>> df.set_index('a', inplace=True)
>>> df
b c
a
1 2 3
4 5 6
>>> df['index_x10'] = df.apply(lambda row: 10*row.name, axis=1)
>>> df
b c index_x10
a
1 2 3 10
4 5 6 40
언급URL : https://stackoverflow.com/questions/26658240/getting-the-index-of-a-row-in-a-pandas-apply-function
'programing' 카테고리의 다른 글
'#' 링크를 클릭했을 때 페이지 맨 위로 이동하지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.09.13 |
---|---|
Java에서 모든 열거값을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.13 |
왼쪽 외부 결합에서 반환된 기본 Null 값 바꾸기 (0) | 2022.09.13 |
PyCharm에서 최대 회선 길이를 설정하려면 어떻게 해야 합니까? (0) | 2022.09.13 |
JavaScript 가비지 컬렉션이란? (0) | 2022.09.13 |