为什么我在使用pandas apply后数据框中出现空行?
我刚开始学习Python和Pandas,想弄明白怎么做一个简单的拆分-连接-应用操作。现在遇到的问题是,我从Pandas的apply函数得到的数据框里,最上面总是多出一行空白的,我不知道为什么。有人能解释一下吗?
下面是一个简单的例子,展示了这个问题,并不是我实际的代码:
sorbet = pd.DataFrame({
'flavour': ['orange', 'orange', 'lemon', 'lemon'],
'niceosity' : [4, 5, 7, 8]})
def calc_vals(df, target) :
return pd.Series({'total' : df[target].count(), 'mean' : df[target].mean()})
sorbet_grouped = sorbet.groupby('flavour')
sorbet_vals = sorbet_grouped.apply(calc_vals, target='niceosity')
如果我接着执行 print(sorted_vals)
,我得到的输出是:
mean total
flavour <--- Why are there spaces here?
lemon 7.5 2
orange 4.5 2
[2 rows x 2 columns]
再对比一下 print(sorbet)
的结果:
flavour niceosity <--- Note how column names line up
0 orange 4
1 orange 5
2 lemon 7
3 lemon 8
[4 rows x 2 columns]
是什么导致了这个差异,我该怎么解决呢?
1 个回答
12
groupby/apply操作会返回一个新的数据表(DataFrame),这个表有一个命名的索引。这个名字对应于原始数据表中用来分组的那一列的名字。
这个名字会显示在索引的上方。如果你把它重置为None
,那么这个行就会消失:
In [155]: sorbet_vals.index.name = None
In [156]: sorbet_vals
Out[156]:
mean total
lemon 7.5 2
orange 4.5 2
[2 rows x 2 columns]
要注意的是,这个name
是很有用的——我不太建议去掉它。这个名字让你可以通过名字来引用这个索引,而不仅仅是通过数字。
如果你想把索引变成一列,可以使用reset_index
:
In [209]: sorbet_vals.reset_index(inplace=True); sorbet_vals
Out[209]:
flavour mean total
0 lemon 7.5 2
1 orange 4.5 2
[2 rows x 3 columns]