다음은 적용 할 함수를 작성하여 해결할 수있는 흥미로운 문제입니다. 키가이 그룹에 의지 열 및 '데이터 1을'이다
import pandas as pd
import random
DF = pd.DataFrame({
'key' : [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7],
'data1' : ['A', 'B', 'C', 'A', 'B', 'B', 'B', 'C', 'A', 'B', 'A', 'B', 'C',
'A', 'B', 'B', 'B', 'C'],
'data2' : [random.random() for x in xrange(18)]})
당신이를 테스트하는 데 사용할 열이
:
는이 같은 데이터 (질문과 편리했을 것이다) 한 가정 조건. 이 데이터는 그룹 1, 3, 5 및 7에 대한 관측치가 홀수입니다. 첫 번째 관측에서 이들 그룹에 대한 'data1'값은 'A', 'B', A ','B '입니다.
def apply_func(df, col, condition):
if len(df)%2 == 0:
return None
else:
if df.irow(0)[col] == condition:
return df.irow(0)
else:
return None
: 당신이 그 그룹에서 처음 관찰로 새로운 dataframe을 얻고 싶었다,하지만 첫 번째 행의 '데이터 1'값이 B. 동일입니다 우리는이 같은 일반적인 함수를 작성할 수 있습니다 예를 들어 가정 내가 잘못 아니에요 경우 생성 할 출력 유형이
data1 data2 key
2 B 0.980814 3
6 B 0.428402 7
: 다음과 같은 출력을 제공
DF.groupby('key').apply(apply_func, 'data1', 'B').dropna()
을 다음과 같이
한 다음 그룹에 문의하십시오.
물론 실제로 함수의 모든 분기가 필요하지는 않지만 명확하게하기 위해 포함합니다. 기능을 작성하는 가장 간결한 방법은 다음과 같습니다 적용하는 함수를 통과 호출 할 때, 전달 된 주먹 인수가 DataFrame 자체이며,이 때문에 자동으로 수행됩니다
def apply_func(df, col, condition):
if len(df)%2 != 0 and df.irow(0)[col] == condition:
return df.irow(0)
하는 것으로. 그래서 함수를 전달할 때 'df'인수를 지정할 필요가 없습니다. 사실 당신이 그렇게한다면 당신은 너무 많은 주장들을 지나쳤다는 오류를 얻습니다. 또한 다소 이상하게 내보기에서 함수를 전달할 때 인수는 괄호 대신 쉼표 다음에 제공됩니다. 이것은 내가보기에 혼란 스럽지만, 그것이 무엇인지 알 것입니다 ....
Canonical! 감사합니다 – Lamakaha