Python 为什么在使用pandas apply之后,我的数据帧中会出现一个空行?
我对Python和Pandas还比较陌生,正在尝试弄清楚如何应用一个简单的split-join。我遇到的问题是,我从Pandas的apply函数返回的所有数据帧的顶部都有一个空行,我不知道为什么。有人能解释一下吗 下面是一个演示问题的简单示例,而不是我的实际代码:Python 为什么在使用pandas apply之后,我的数据帧中会出现一个空行?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我对Python和Pandas还比较陌生,正在尝试弄清楚如何应用一个简单的split-join。我遇到的问题是,我从Pandas的apply函数返回的所有数据帧的顶部都有一个空行,我不知道为什么。有人能解释一下吗 下面是一个演示问题的简单示例,而不是我的实际代码: sorbet = pd.DataFrame({ 'flavour': ['orange', 'orange', 'lemon', 'lemon'], 'niceosity' : [4, 5, 7, 8]}) def calc
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')
如果我随后执行打印(已排序的值)
我将得到以下输出:
mean total
flavour <--- Why are there spaces here?
lemon 7.5 2
orange 4.5 2
[2 rows x 2 columns]
造成这种差异的原因是什么?我如何修复它?groupby/apply操作返回的是一个新的数据帧,带有命名索引。该名称对应于原始数据帧分组所依据的列名 该名称显示在索引上方。如果将其重置为
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]
请注意,名称
很有用——我并不建议删除它。该名称允许您通过名称而不仅仅是数字来引用该索引
如果希望索引成为列,请使用
reset\u 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]
不确定OP是想要这个还是想要2x3结果的
.reset\u index()
。啊,好吧,那么原因是groupby/apply操作用分组值的索引替换了通常的索引?正确吗?是的,groupby/apply的结果是一个新的DataFrame,带有命名索引,名称对应于原始DataFrame分组所依据的列名。我想要的是创建一个DataFrame,其风格、平均值和总数与普通列相同。有没有一种自然的方法可以做到这一点?啊,那么你正在寻找DSM的答案<代码>冰糕价值。重置索引()@DSM:你想发布一个答案吗?
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]