당신이 (이 경우에는 앤디의 솔루션은 당신이 원하는) 집계 번호를 원하는 경우
는 말할 수 없다, 또는 경우에 당신이 그것을 다시 전환하려면 원래의 데이터 프레임에 추가합니다. 이 후자의 경우 transform
In [33]: cols = ['PetalLength', 'PetalWidth']
In [34]: transformed = grouped_iris[cols].transform(sum).sum(axis=1)
In [35]: iris['SumLengthWidth'] = transformed
In [36]: iris.head()
Out[36]:
SepalLength SepalWidth PetalLength PetalWidth Name SumLengthWidth
0 5.1 3.5 1.4 0.2 Iris-setosa 85.4
1 4.9 3.0 1.4 0.2 Iris-setosa 85.4
2 4.7 3.2 1.3 0.2 Iris-setosa 85.4
3 4.6 3.1 1.5 0.2 Iris-setosa 85.4
4 5.0 3.6 1.4 0.2 Iris-setosa 85.4
편집 사용할 수 있습니다 sum
으로 GROUPBY를 집계하는 dataframe df
을 위해 일반적으로 일반적인 경우의 예를
것은, 당신에게 각 그룹의 합계를 제공
In [47]: df
Out[47]:
Name val1 val2
0 foo 6 3
1 bar 17 4
2 foo 16 6
3 bar 7 3
4 foo 6 13
5 bar 7 1
In [48]: grouped = df.groupby('Name')
In [49]: grouped.agg(sum)
Out[49]:
val1 val2
Name
bar 31 8
foo 28 22
귀하의 경우 행 전체에서 이들을 합산하는 데 관심이 있습니다 :
In [50]: grouped.agg(sum).sum(axis=1)
Out[50]:
Name
bar 39
foo 50
하지만 두 개의 숫자 만 제공합니다. 각 그룹당 1. 당신이 원래 dataframe에 다시 투영 된 두 숫자를 원하는 경우 일반적으로, 당신은 transform
를 사용하려면 :
In [51]: grouped.transform(sum)
Out[51]:
val1 val2
0 28 22
1 31 8
2 28 22
3 31 8
4 28 22
5 31 8
공지 사항이 값은 agg
, 하지만에 의해 생성 된 값과 정확히 동일 어떻게 원래 치수가 df
입니다. 행 [0, 2, 4]와 [1, 3, 5]가 동일한 그룹이므로 다른 모든 값이 반복되는 방법에 유의하십시오. 귀하의 경우에는 두 값의 합계가 필요하므로 행 전체에서 이것을 합산하십시오.
In [52]: grouped.transform(sum).sum(axis=1)
Out[52]:
0 50
1 39
2 50
3 39
4 50
5 39
당신이 컬럼으로 다시 할당 (또는 당신이 그것으로 좋아하는 일을 할) 수 있도록 지금, 원래 dataframe과 같은 길이의 시리즈를 가지고 :
In [53]: df['val1 + val2 by Name'] = grouped.transform(sum).sum(axis=1)
In [54]: df
Out[54]:
Name val1 val2 val1 + val2 by Name
0 foo 6 3 50
1 bar 17 4 39
2 foo 16 6 50
3 bar 7 3 39
4 foo 6 13 50
5 bar 7 1 39
당신은 더 설명 할 수 'grouped_iris [cols] .transform (sum)'이 정확히 여기에서하고 있으며'transform'이 일반적으로 어떻게 사용 되는가? 나는 그것의 문서를보고 나서 아직도 혼란 스럽다. 감사. – user248237dfsf
그게 더 명확합니까? – beardc