Python 为什么在熊猫中使用apply时会有一个额外的索引
当我在Pandas中对用户定义的函数使用Python 为什么在熊猫中使用apply时会有一个额外的索引,python,pandas,apply,Python,Pandas,Apply,当我在Pandas中对用户定义的函数使用apply时,看起来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,
apply
时,看起来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()
因此,您将无法避免出现级别2。这是因为分组的结果是一个包含多个项的数据帧:pandas很酷,可以理解您希望在分组的键之间广播这些项,但是它将数据帧的索引作为一个额外的级别,以保证一致的输出数据。因此,在处理结束时显式删除level=-1是应该的
如果您希望避免重置额外的索引,但仍有一些后期处理,另一种方法是调用transform而不是apply,并从
fnc
获取返回的数据,该数据是放置np.nan
以排除结果的整个组向量。然后,您的数据帧将不会有额外的级别,但您需要在之后调用dropna()
。您在跟踪:data[data.C<0]
?您想完成什么。这并不明显,为什么要在fnc
中返回一个数据帧?你的导出结果是什么,为什么首先要做一个groupby?看起来简单的data[data['C']<0]
对你来说应该行得通。我的问题是为什么要创建一个列“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