使用pandas DataFrame分组操作,我得到了非常奇怪的结果。我想要做的是按索引分组(我的索引是非唯一的),然后适当地填充空值。这在许多情况下有效,但在某些情况下,我得到一个奇怪的行为,其中返回的是所有返回的空DataFrame:
{12, 15, 12}
但是,如果我稍微改变DataFrame,则通过重命名索引项' QZa_new'到' qza_new':
df = pd.DataFrame(columns=['sample', 'cooling_rate'],
index=['SYd', 'SYd', 'XNa', 'Xna', 'Qza_new', 'Qza_new'],
data=[['SYd', 3], ['SYd', 3], ['XNa', 3],
['XNa', 3], ['val1', 'val3'], ['val1', None]])
res = df.groupby(df.index).fillna('1')
#Empty DataFrame
#Columns: []
#Index: []
结果是按预期正确分组,填充的DataFrame。我无法理解这种行为,而且我没有得到任何类型的错误"。
通过更多实验,看起来密钥肯定在我的DataFrame索引行中:
df = pd.DataFrame(columns=['sample', 'cooling_rate'],
index=['SYd', 'SYd', 'XNa', 'Xna', 'qza_new', 'qza_new'],
data=[['SYd', 3], ['SYd', 3], ['XNa', 3],
['XNa', 3], ['val1', 'val3'], ['val1', None]])
res = df.groupby(df.index).fillna('1')
# sample cooling_rate
#SYd SYd 3
#SYd SYd 3
#XNa XNa 3
#Xna XNa 3
#qza_new val1 val3
#qza_new val1 1
似乎倒数第二个值必须在字母表中早于最后一个值。换句话说,
index=['SYd', 'SYd', 'XNa', 'Xna', 'qza_new', 'qza_new'],
工作并返回填充的DataFrame,但是:
index=['SYd', 'SYd', 'XNa', 'XNa', 'a', 'b']
返回一个空的DataFrame。但为什么呢?
我怀疑我必须遗漏一些明显的东西,但我不知道为什么我会看到这种行为。
更新
这个问题似乎已为人所知:https://github.com/pandas-dev/pandas/issues/14955希望下一版本能够修复。