web-dev-qa-db-ja.com

Pandas-groupbyの結果に列名を追加

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
4

方法1:

groupbyで引数as_index = Falseを使用します。

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
10
sacuL