Câu hỏi
Có hai câu hỏi mà trông tương tự nhưng họ không phải là cùng một câu hỏi: here và here. Cả hai đều gọi một phương thức là GroupBy
, chẳng hạn như count()
hoặc aggregate()
, mà tôi biết trả về DataFrame
. Những gì tôi yêu cầu là làm thế nào để chuyển đổi các đối tượng GroupBy
(lớp pandas.core.groupby.DataFrameGroupBy
) chính nó thành một DataFrame
. Tôi sẽ minh họa bên dưới.Python Pandas chuyển đổi đối tượng groupby để DataFrame
Ví dụ
Tạo ví dụ DataFrame
như sau.
data_list = []
for name in ["sasha", "asa"]:
for take in ["one", "two"]:
row = {"name": name, "take": take, "score": numpy.random.rand(), "ping": numpy.random.randint(10, 100)}
data_list.append(row)
data = pandas.DataFrame(data_list)
Ở trên DataFrame
sẽ giống như sau (với các số khác nhau rõ ràng).
name ping score take
0 sasha 72 0.923263 one
1 sasha 14 0.724720 two
2 asa 76 0.774320 one
3 asa 71 0.128721 two
Những gì tôi muốn làm là vào nhóm bởi các cột "Tên" và "mất" (theo thứ tự đó), vì vậy mà tôi có thể nhận được một DataFrame
lập chỉ mục của multiindex xây dựng từ các cột "Tên" và "lấy", như dưới đây.
score ping
name take
sasha one 0.923263 72
two 0.724720 14
asa one 0.774320 76
two 0.128721 71
Làm cách nào để đạt được điều đó? Nếu tôi làm grouped = data.groupby(["name", "take"])
, thì grouped
là một ví dụ pandas.core.groupby.DataFrameGroupBy
. Làm cách nào để chuyển đổi grouped
thành một phiên bản DataFrame
?
Oooooh !!!! Riiiiiight !!!!! OK Tôi sẽ chấp nhận câu trả lời này sau 9 phút khi Stack Overflow cho phép tôi. Cảm ơn bạn. – Ray
Khi tôi cố gắng sử dụng câu trả lời này, tôi nhận được một 'AttributeError'. "Không thể truy cập thuộc tính có thể gọi 'set_index' của đối tượng 'DataFrameGroupBy', hãy thử sử dụng phương thức 'áp dụng'" – Nate
@Nate - Có vẻ như 'dữ liệu' không phải là' DataFrame', nhưng đầu ra của nhóm - vì vậy cần 'g = df.groupby ('col') 'và sau đó' g.apply (lambda x: x ['col1']. set_index()) ' – jezrael