Pandas访问groupby列数据

时间:2014-04-28 22:13:16

标签: python pandas

我有一个数据框已按两列名称分组,让我们说标题如下:

             A, B, C, D, E, F
IdxA, IdxB

derp  foo    1  5  6  3  2  1
derp  bar    2  3  4  1  9  0
...

对于每个IdxB,我想获得cols E和Fn中所有唯一值对的列表以及来自D的唯一值列表。目前我正在使用循环,如下所示:

for (IdxA, IdxB), tbl in grouped:
    pairValues = tbl[['E', 'F']].drop_duplicates()
    E_unique = tbl['D'].unique()
    print IdxB
    print E_unique
    for _, row in pairValues.iterrows():
        print row['E'] + ' ' + row['F']
    print

我觉得有更好的方法可以做到这一点,但我对熊猫来说是一个小菜鸟...是否有更好的方法或者我做得足够多了#34; pythonic"方式是什么?

注意:单元格实际上包含文本数据而不是数字,为简单起见,我只使用了数字。

示例输出:

IdxB Name (eg. foo)
List of unique values belonging to IdxB (content is IP addresses)
List of unique string pairs from ['E','F'] belonging to IdxB (content is strings)

非常感谢

1 个答案:

答案 0 :(得分:0)

一个起点是重置索引,然后按indexb分组。假设您的数据框名为df:

def gimmeStuff(group):
    data = group.drop_duplicates(['E', 'F'])
    return data[['D', 'E', 'F']]

df.reset_index(inplace=True)
results = df.groupby('IdxB').apply(gimmeStuff)

由于没有从你身边提供的真实数据,我无法进行真正的测试 - 可能存在错别字,但这是我放下它的方式。这将为您提供由IdxB索引的包含D,E,F列的数据集。对于每个IdxB,D将重复包含相同的值,并且E,F将是唯一的组合。

<强>更新

/ edit表示,如果您不想重新索引,您实际上可以直接对数据进行分组:

results = df.groupby(level=1).apply(gimmeStuff)