我有一只像这样的大熊猫DataFrame
:
test = pd.DataFrame({'score1' : pandas.Series(['a', 'b', 'c', 'd', 'e']), 'score2' : pandas.Series(['b', 'a', 'k', 'n', 'c'])})
输出:
score1 score2
0 a b
1 b a
2 c k
3 d n
4 e c
然后,我将score1
和score2
列拆分并将它们连接在一起:
In (283): frame1 = test[['score1']]
frame2 = test[['score2']]
frame2.rename(columns={'score2': 'score1'}, inplace=True)
test = pandas.concat([frame1, frame2])
test
Out[283]:
score1
0 a
1 b
2 c
3 d
4 e
0 b
1 a
2 k
3 n
4 c
请注意重复索引。现在,如果我执行groupby
然后使用get_group()
检索组,则pandas仍然可以检索具有正确索引的元素,即使索引是重复的!
In (283): groups = test.groupby('score1')
groups.get_group('a') # Get group with key a
Out[283]:
score1
0 a
1 a
In (283): groups.get_group('b') # Get group with key b
Out[283]:
score1
1 b
0 b
据我所知,pandas使用倒排索引数据结构来存储组,如下所示:
In (284): groups.groups
Out[284]: {'a': [0, 1], 'b': [1, 0], 'c': [2, 4], 'd': [3], 'e': [4], 'k': [2], 'n': [3]}
如果a
和b
都存储在索引0
,那么当我get_group()
时,pandas如何正确显示元素?
答案 0 :(得分:0)
这是进入内部的(即,不依赖于这个API!)但它现在的工作方式是有一个Grouping
对象存储组的位置,而不是索引标签
In [25]: gb = test.groupby('score1')
In [26]: gb.grouper
Out[26]: <pandas.core.groupby.BaseGrouper at 0x4162b70>
In [27]: gb.grouper.groupings
Out[27]: [Grouping(score1)]
In [28]: gb.grouper.groupings[0]
Out[28]: Grouping(score1)
In [29]: gb.grouper.groupings[0].indices
Out[29]:
{'a': array([0, 6], dtype=int64),
'b': array([1, 5], dtype=int64),
'c': array([2, 9], dtype=int64),
'd': array([3], dtype=int64),
'e': array([4], dtype=int64),
'k': array([7], dtype=int64),
'n': array([8], dtype=int64)}
请在此处查看实际实施的位置。 https://github.com/pydata/pandas/blob/master/pandas/core/groupby.py#L2091