将列标题添加到新的pandas数据帧

Lea*_*wly 4 python pandas

我正在使用.groupby.size方法从之前的数据框架创建一个新的pandas数据框.

[in] results = df.groupby(["X", "Y", "Z", "F"]).size()

[out]
    9   27/02/2016  1   N   326
    9   27/02/2016  1   S   332
    9   27/02/2016  2   N   280
    9   27/02/2016  2   S   353
    9   27/02/2016  3   N   177
Run Code Online (Sandbox Code Playgroud)

这表现得如预期,但结果是没有列标题的数据帧.

SO问题表明以下内容将列名添加到生成的数据帧中

[in] results.columns = ["X","Y","Z","F","Count"]
Run Code Online (Sandbox Code Playgroud)

但是,这似乎没有任何影响.

[out]
        9   27/02/2016  1   N   326
        9   27/02/2016  1   S   332
        9   27/02/2016  2   N   280
        9   27/02/2016  2   S   353
        9   27/02/2016  3   N   177
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 6

您所看到的是您的分组列作为索引,如果您调用reset_index它然后它将恢复列名称

所以

results = df.groupby(["X", "Y", "Z", "F"]).size()
results.reset_index()
Run Code Online (Sandbox Code Playgroud)

应该管用

In [11]:
df.groupby(["X","Y","Z","F"]).size()

Out[11]:
X  Y           Z  F
9  27/02/2016  1  N    1
                  S    1
               2  N    1
                  S    1
               3  N    1
dtype: int64

In [12]:    
df.groupby(["X","Y","Z","F"]).size().reset_index()

Out[12]:
   X           Y  Z  F  0
0  9  27/02/2016  1  N  1
1  9  27/02/2016  1  S  1
2  9  27/02/2016  2  N  1
3  9  27/02/2016  2  S  1
4  9  27/02/2016  3  N  1
Run Code Online (Sandbox Code Playgroud)

此外,您可以通过以下方式实现您的目标count:

In [13]:
df.groupby(["X","Y","Z","F"]).count().reset_index()

Out[13]:
   X           Y  Z  F  Count
0  9  27/02/2016  1  N      1
1  9  27/02/2016  1  S      1
2  9  27/02/2016  2  N      1
3  9  27/02/2016  2  S      1
4  9  27/02/2016  3  N      1
Run Code Online (Sandbox Code Playgroud)

你也可以as_index=False在这里传递参数:

In [15]:
df.groupby(["X","Y","Z","F"], as_index=False).count()

Out[15]:
   X           Y  Z  F  Count
0  9  27/02/2016  1  N      1
1  9  27/02/2016  1  S      1
2  9  27/02/2016  2  N      1
3  9  27/02/2016  2  S      1
4  9  27/02/2016  3  N      1
Run Code Online (Sandbox Code Playgroud)

这通常很好,但是如果您尝试在dtypes无法聚合的列上使用聚合方法,则某些聚合函数将会出现问题,例如,如果您有strdtypes并且您决定调用mean该实例.