함수에 여러 인수가있는 경우 groupby.apply 또는 groupby.transform과 함께 사용할 함수를 작성하면 groupby의 일부로 함수를 호출 할 때 인수는 괄호 안의. 예를 들면 다음과 같습니다.Groupby를 사용할 때 여러 인수가있는 함수 호출
def Transfunc(df, arg1, arg2, arg2):
return something
GroupedData.transform(Transfunc, arg1, arg2, arg3)
여기서 첫 번째 인수로 df 인수가 자동으로 전달됩니다.
그러나 데이터를 그룹화하는 기능을 사용할 때 동일한 구문이 가능하지는 않습니다. 다음 예제를보십시오 :
people = DataFrame(np.random.randn(5, 5), columns=['a', 'b', 'c', 'd', 'e'], index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
people.ix[2:3, ['b', 'c']] = NA
def MeanPosition(Ind, df, Column):
if df[Column][Ind] >= np.mean(df[Column]):
return 'Greater Group'
else:
return 'Lesser Group'
# This function compares each data point in column 'a' to the mean of column 'a' and return a group name based on whether it is greater than or less than the mean
people.groupby(lambda x: MeanPosition(x, people, 'a')).mean()
위의 작업은 정상적으로 작동하지만 왜 나는 람다에서 함수를 랩해야하는지 이해할 수 없습니다. 함께 사용되는 구문에 근거하여 변환하고 다음이 잘 작동한다는 것을 나에게 보인다 적용 : 왜
이people.groupby(MeanPosition, people, 'a').mean()
아무도 말해 줄 수, 또는 어떻게 람다에 포장하지 않고 함수를 호출 할 수 있습니다?
감사
편집 : 나는이 그룹에 람다에서 해당 기능을 포장하지 않고 키와 같은 기능을 전달하여 데이터 가능하다고 생각하지 않습니다. 한 가지 가능한 해결 방법은 함수를 키로 전달하는 대신 함수에 의해 생성 된 배열을 전달하는 것입니다. .... 단지 목록 comprhension 배열을 사용하여 간단하게 모두 함께 중간 남자 기능을 절단하고
(당신이 당신의 예에있는 모든 별개의 그룹을 가지고 약간 수정) 원하는 무슨 생각을하는 방법입니다 (지금까지 볼 수 있듯이, 그것은 아닙니다) 그리고 미래에 groupby에게'** kwarg'를 추가 할 수 있다면 –
그 좌절! 나는 그것을 람다로 감싸는 것은 쉽지만, 이것이 왜 그럴 수 있는지 설명하기는 어렵다. ... –