df。
的索引
df是一个简单的索引:
In [8]: df.indexOut[8]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8], dtype='int64')
而计算所得列的索引是MultiIndex(您也已经在输出中看到了),假设我们将其称为
new_column:
In [15]: new_column.indexOut[15]: MultiIndex[(u'X', 3), (u'X', 1), (u'X', 0), (u'Y', 8), (u'Y', 7), (u'Y', 5), (u'Z', 6), (u'Z', 2), (u'Z', 4)]
因此,您不能将其插入框架。但是, 这是0.12中的错误
,因为它确实在0.13中有效(已针对链接的问题中的答案进行了测试),并且关键字
as_index=False应确保未将列
L1添加到索引中。
0.12的解决方案 :
删除MultiIndex的第一级,以便返回原始索引:
In [13]: new_column = df.groupby('L1', as_index=False).apply(lambda x : pd.expanding_sum(x.sort('L3', ascending=False)['L3'])/x['L3'].sum())In [14]: df["new"] = new_column.reset_index(level=0, drop=True)
在pandas
0.13(开发中)中,此问题已修复(https://github.com/pydata/pandas/pull/4670)。因此
as_index=False,在groupby调用中使用了,因此未将列
L1(您进行分组的列)添加到索引中(创建MultiIndex),因此保留了原始索引并将结果附加到原始框架中。但是使用时,似乎
as_index在0.12中忽略了该关键字
apply。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)