TypeError:无法将非类别项附加到CategoricalIndex

时间:2016-01-20 13:43:02

标签: python python-2.7 pandas merge categorical-data

我无法合并数据框,无法理解原因:

简单数据框

...
while( $query->have_posts() ) : 
    $emailBody = '';
    $query->the_post();
...

分组为3组合

-webkit-box-pack: end;
-webkit-box-align: center;

输出:

df1 = pd.DataFrame({'id': np.random.randint(1,5,100),
                    'c': np.random.random(100),
                    's': np.random.random(100)})

第二个简单数据框:

grouped = pd.qcut(df1.c, 3)
df_grouped = df1.groupby([grouped, 'id'])
df_cross = df_grouped['s'].sum()
df_unstacked = df_cross.unstack(level=0)
df_unstacked 

尝试合并两者:

c   [0.018, 0.372]  (0.372, 0.771]  (0.771, 0.995]
id          
1   3.081537    6.329819    3.386422
2   4.270542    2.553301    3.778536
3   3.125476    2.525016    3.013912
4   5.762223    3.763183    7.953551

我希望:

df2 = pd.DataFrame({'one': range(5),
                   'two': np.random.randint(1,5,5),
                   'three': ['a', 'a', 'a', 'b', 'b']})

   one three two
0   0   a   4
1   1   a   2
2   2   a   1
3   3   b   2
4   4   b   2

但我得到TypeError:

  

TypeError:无法将非类别项附加到CategoricalIndex

另外,在df_unstacked上尝试reset_index()会产生TypeError:

  

TypeError:无法将项目插入尚未成为现有类别的CategoricalIndex

制作.copy()没有帮助:)该怎么办?

P.S。大熊猫0.17.1

1 个答案:

答案 0 :(得分:2)

使这项工作的一种方法是切换左表和右表的顺序。 Pandas允许您将Categorical列加入非Categorical列,但不是相反。

pd.merge(df2,df_unstacked, right_index=True, left_on='one')