我正在使用.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)
您所看到的是您的分组列作为索引,如果您调用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该实例.
| 归档时间: |
|
| 查看次数: |
2133 次 |
| 最近记录: |