다음과 같은 데이터 프레임이 있습니다.
animals = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],
'height': [9.1, 6.0, 9.5, 34.0],
'weight': [7.9, 7.5, 9.9, 198.0]})
그룹화하고 일부 집계 함수를 여러 번 적용하고 싶습니다. 함수가 실행되는 횟수와 실행될 매개 변수는 동적이어야합니다 (출력은 매개 변수 목록에 따라 달라야 함).
예:
종류별로 그룹화하고 높이의 평균, 높이의 평균 + 1, 높이의 평균 + 2를 계산하고 싶다면 다음을 실행할 수 있습니다.
parameters = [0,1,2]
animals.groupby(['kind']).agg(
mean_height = ('height', lambda x: x.mean() + parameters[0]),
mean_height_plus_1 = ('height', lambda x: x.mean() + parameters[1]),
mean_height_plus_2 = ('height', lambda x: x.mean() + parameters[2]))
그러나 이것은 매개 변수 목록의 길이를 미리 알아야합니다. 하지만 나중에 마음 parameters = [0,1,2,359]
을 바꾸고 코드를 수동으로 변경할 필요없이을 위해 똑같이하고 싶습니다 .
animals.groupby(['kind']).agg(
mean_height = ('height', lambda x: x.mean() + parameters[0]),
mean_height_plus_1 = ('height', lambda x: x.mean() + parameters[1]),
mean_height_plus_2 = ('height', lambda x: x.mean() + parameters[2]),
mean_height_plus_359 = ('height', lambda x: x.mean() + parameters[3]))
예를 들어 다음을 사용하여 함수를 정의 params
하고 적용 할 수 있습니다.
def get_mean(x, params):
return pd.Series(x.mean() + np.array(params),
index = [f'mean_plus_{i}' for i in params])
animals.groupby('kind').apply(get_mean, parameters)
산출:
kind
cat mean_plus_0 9.3
mean_plus_1 10.3
mean_plus_2 11.3
dog mean_plus_0 20.0
mean_plus_1 21.0
mean_plus_2 22.0
Name: height, dtype: float64
또는 for
루프를 수행 할 수 있습니다 .
groups = animals.groupby('kind')
ret_df = pd.DataFrame()
for i in parameters:
ret_df[f'mean_plus_{i}'] = groups['height'].mean() + i
산출:
mean_plus_0 mean_plus_1 mean_plus_2
kind
cat 9.3 10.3 11.3
dog 20.0 21.0 22.0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다