关于python:Pandas – 将列名添加到groupby的结果中

Pandas - Add Column Name to Results of groupby

本问题已经有最佳答案,请猛点这里访问。

我想在Python3.6中的DataFrame上向groupby的结果中添加列名。

我试过这个代码:

1
2
3
4
5
import pandas as pd
d = {'timeIndex': [1, 1, 1, 1, 2, 2, 2], 'isZero': [0,0,0,1,0,0,0]}
df = pd.DataFrame(data=d)
df2 = df.groupby(['timeIndex'])['isZero'].sum()
print(df2)

结果

1
2
3
4
timeIndex
1    1
2    0
Name: isZero, dtype: int64

看起来timeIndex是一个列标题,但是尝试按名称处理列会产生异常。

1
2
3
4
5
df2['timeIndex']
# KeyError: 'timeIndex'

df2['isZero']
# KeyError: 'isZero'

我在找这个结果。

1
2
3
4
5
6
7
8
9
10
df2

     timeIndex    isZero
0    1    1
1    2    0

df2['isZero']

0    1
1    0

方法1:

在你的groupby中使用参数as_index = False

1
2
3
4
5
6
7
8
9
10
11
df2 = df.groupby(['timeIndex'], as_index=False)['isZero'].sum()

>>> df2
   timeIndex  isZero
0          1       1
1          2       0

>>> df2['isZero']
0    1
1    0
Name: isZero, dtype: int64

方法2:

您可以将to_frame与所需的列名一起使用,然后使用reset_index

1
2
3
4
5
6
7
8
9
10
11
df2 = df.groupby(['timeIndex'])['isZero'].sum().to_frame('isZero').reset_index()

>>> df2
   timeIndex  isZero
0          1       1
1          2       0

>>> df2['isZero']
0    1
1    0
Name: isZero, dtype: int64