我正在使用pandas df.groupby()
函数将我的数据框分组到一个列上并按如下方式迭代它:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
""" above df looks like this
A B C D
0 foo one -0.575010 -0.271119
1 bar one -0.130209 -0.106217
2 foo two 0.093987 -1.351369
3 bar three -0.403304 0.983619
4 foo two 0.668989 0.249099
5 bar two 1.153876 1.407159
6 foo one 1.453793 -0.347721
7 foo three 0.493562 -0.051688
"""
grouped = df.groupby('A')
for name, group in grouped:
print(group)
print(group['B'])
此处print(group)
返回如下:
A B C D
1 bar one -0.130209 -0.106217
3 bar three -0.403304 0.983619
5 bar two 1.153876 1.407159
group['B']
返回
1 one
3 three
5 two
我想获得one
而不是索引1或3或5,而只是one
,three
和two
列B
。
这里iloc
不起作用,因为索引不是连续的,我不知道在迭代分组数据帧时会发生哪个索引。
答案 0 :(得分:2)
将df.to_string
与index=False
:
for _, g in df.groupby('A'):
print(g['B'].to_string(index=False))
这打印出一个系列但没有附带的索引。或者,如果您需要值列表,请使用g['B'].tolist()
。
答案 1 :(得分:1)
尝试group['B'].values
。
这会将系列的元素作为numpy数组返回。