【发布时间】:2021-10-29 09:58:04
【问题描述】:
我有一个 MultiIndexed 数据框,我正在分解其中一个索引。该数据如下所示:
some_vals = [['blue', 'green']] * 3 + [['orange', 'yellow']] * 2 + [['violet', 'fuligin']] * 5
some_index = pd.MultiIndex.from_tuples([('foo', 1)] * 3 + [('bar', 4)] * 2 + [('baz', 7)] * 5,
names=('wibble', 'wobble'))
some_data = pd.DataFrame(some_vals, index=some_index, columns=('quality', 'aspect'))
在我的实际数据中,如some_data,给定wibble 的所有行 应该是相同的。为了以编程方式验证这一点,我这样做:
grouped.apply(lambda g: g.value_counts().count() == 1)
# wibble
# bar True
# baz True
# foo True
# dtype: bool
这没问题,但是当我将它吹到我的实际数据集时,它似乎很慢,大约 5000 行需要几秒钟。这看起来很慢,让我觉得必须有一种更有效(并且可能更自然)的方式来实现这一点。
使用nunique 并不能完全满足我的需求,这很遗憾,因为它更快:
grouped.apply(lambda g: (g.nunique() == 1)).all()
# quality True
# aspect True
# dtype: bool
我想捕获行不一致的组,但这会按列进行。
【问题讨论】:
-
@Stef 不太符合我的要求,因为它分别处理每一列。我已经编辑了我的问题以澄清。
标签: pandas-groupby