我有一个数据框已按两列名称分组,让我们说标题如下:
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)
非常感谢
答案 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)