Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在使用pandas apply之后,我的数据帧中会出现一个空行?_Python_Python 3.x_Pandas - Fatal编程技术网

Python 为什么在使用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

我对Python和Pandas还比较陌生,正在尝试弄清楚如何应用一个简单的split-join。我遇到的问题是,我从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')
如果我随后执行
打印(已排序的值)
我将得到以下输出:

         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]