将计算出的列附加到现有数据框

将计算出的列附加到现有数据框,第1张

将计算出的列附加到现有数据框

如错误消息所述,问题是您要插入的计算列的索引与的索引不兼容

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



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5674465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存