当我使用apply
对于 Pandas 中的用户定义函数,看起来 python 正在创建一个附加数组。我怎样才能摆脱它呢?这是我的代码:
def fnc(group):
x = group.C.values
out = x[np.where(x < 0)]
return pd.DataFrame(out)
data = pd.DataFrame({'A':np.random.randint(1, 3, 10),
'B':3,
'C':np.random.normal(0, 1, 10)})
data.groupby(by=['A', 'B']).apply(fnc).reset_index()
有这个奇怪的Level_2
索引已创建。有没有办法避免在运行我的函数时创建它?
A B level_2 0
0 1 3 0 -1.054134802
1 1 3 1 -0.691996447
2 2 3 0 -1.068693768
3 2 3 1 -0.080342046
4 2 3 2 -0.181869799
因此,你将无法避免 level_2 的出现。这是因为分组的结果是一个包含多个项目的数据帧:pandas 足够酷,可以理解您的愿望是跨分组的键广播这些项目,但它会将数据帧的索引作为附加级别来保证一致的输出数据。因此,预计在处理结束时明确删除 level=-1 。
如果您想避免重置额外的索引,但仍然需要进行一些后期处理,另一种方法是调用transform而不是apply,并从fnc
是你放置的整个组向量np.nan
要排除的结果。然后,您的数据框将不会有额外的级别,但您需要调用dropna()
然后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)