我想在Python 3.6的DataFrame
上将列名添加到groupby的结果中。
我尝试了以下代码:
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)
结果
timeIndex
1 1
2 0
Name: isZero, dtype: int64
看起来timeIndex
是列标题,但是尝试按名称寻址列会产生异常。
df2['timeIndex']
# KeyError: 'timeIndex'
df2['isZero']
# KeyError: 'isZero'
我正在寻找这个结果。
df2
timeIndex isZero
0 1 1
1 2 0
df2['isZero']
0 1
1 0
答案 0 :(得分:3)
方法1:
在您的as_index = False
中使用参数groupby
:
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
:
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