반응형
질문
다음과 같은 입력 데이터로 시작합니다.
df1 = pandas.DataFrame( {
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
이를 출력하면 다음과 같이 나타납니다:
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Seattle Mallory
4 Seattle Bob
5 Portland Mallory
그룹화는 간단합니다:
g1 = df1.groupby( [ "Name", "City"] ).count()
그리고 출력하면 GroupBy
객체가 나옵니다:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Seattle 1 1
하지만 최종적으로는 GroupBy 객체에 있는 모든 행을 포함하는 또 다른 DataFrame 객체가 필요합니다. 즉, 다음 결과를 얻고 싶습니다:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Mallory Seattle 1 1
pandas 문서에서 이를 어떻게 수행할 수 있는지 잘 보이지 않습니다. 어떤 힌트든 환영합니다.
답변
g1
여기에는 DataFrame이 있습니다. 하지만 이 DataFrame은 계층적 인덱스를 가지고 있습니다:
In [19]: type(g1)
Out[19]: pandas.core.frame.DataFrame
In [20]: g1.index
Out[20]:
MultiIndex([('Alice', 'Seattle'), ('Bob', 'Seattle'), ('Mallory', 'Portland'),
('Mallory', 'Seattle')], dtype=object)
아마도 이렇게 원하시는 것이 아닐까요?
In [21]: g1.add_suffix('_Count').reset_index()
Out[21]:
Name City City_Count Name_Count
0 Alice Seattle 1 1
1 Bob Seattle 2 2
2 Mallory Portland 2 2
3 Mallory Seattle 1 1
또는 이렇게 원하시는 것이 아닐까요:
In [36]: DataFrame({'count' : df1.groupby( [ "Name", "City"] ).size()}).reset_index()
Out[36]:
Name City count
0 Alice Seattle 1
1 Bob Seattle 2
2 Mallory Portland 2
3 Mallory Seattle 1
반응형
댓글