熊猫访问逐列数据



我有一个数据帧,它由两个列名分组,假设标题如下:

             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,我想获得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

我觉得有更好的方法可以做到这一点,但我有点像熊猫。。。有更好的方法吗?还是我用了一种足够"蟒蛇"的方式?

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

示例输出:

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)

非常感谢

一个起点是重置索引,然后按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)

最新更新