Làm cách nào để tôi truy cập vào khung dữ liệu nhóm tương ứng trong một đối tượng nhóm bằng khóa?
Với các nhóm sau:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
'B': rand.randn(6),
'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
Tôi có thể lặp qua nó để lấy các khóa và nhóm:
In [11]: for k, gp in gb:
print 'key=' + str(k)
print gp
key=bar
A B C
1 bar -0.611756 18
3 bar -1.072969 10
5 bar -2.301539 18
key=foo
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
Tôi muốn có thể truy cập một nhóm bằng khóa của nó:
In [12]: gb['foo']
Out[12]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
Nhưng khi tôi thử làm điều đó với gb[('foo',)]
tôi, tôi nhận được pandas.core.groupby.DataFrameGroupBy
thứ đối tượng kỳ lạ này dường như không có bất kỳ phương thức nào tương ứng với DataFrame mà tôi muốn.
Điều tốt nhất tôi có thể nghĩ là:
In [13]: def gb_df_key(gb, key, orig_df):
ix = gb.indices[key]
return orig_df.ix[ix]
gb_df_key(gb, 'foo', df)
Out[13]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
nhưng điều này thật khó chịu, xem xét những con gấu trúc đẹp thường ở những thứ này như thế nào.
Cách tích hợp để làm điều này là gì?
groups = dict(list(gb))
chỉ lưu trữ cộtC
? Giả sử tôi không quan tâm đến các cột khác và do đó không muốn lưu trữ chúng.