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
方法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