pandas DataFrame groupby + fillna产生非常奇怪的结果

时间:2017-02-24 21:20:13

标签: python pandas

使用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希望下一版本能够修复。

0 个答案:

没有答案