私の最初の SO の質問: パンダ (0.12.0-4) の groupby の適用メソッドのこの動作について混乱しています。関数 TWICE をデータ フレームの最初の行に適用するようです。例えば:
>>> from pandas import Series, DataFrame
>>> import pandas as pd
>>> df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count':[1,0,2]})
>>> print(df)
class count
0 A 1
1 B 0
2 C 2
最初に groupby 関数が正常に動作することを確認しましたが、問題ないようです。
>>> for group in df.groupby('class', group_keys = True):
>>> print(group)
('A', class count
0 A 1)
('B', class count
1 B 0)
('C', class count
2 C 2)
次に、groupby オブジェクトで apply を使用して同様のことを実行しようとすると、最初の行の出力が 2 回得られます。
>>> def checkit(group):
>>> print(group)
>>> df.groupby('class', group_keys = True).apply(checkit)
class count
0 A 1
class count
0 A 1
class count
1 B 0
class count
2 C 2
どんな助けでも大歓迎です!ありがとう。
編集: @Jeff は以下の回答を提供します。私は密度が高く、すぐには理解できなかったので、上記の例の最初のグループの二重出力にもかかわらず、apply メソッドが最初のグループで 1 回だけ動作し、元のデータ フレームを変更しないことを示す簡単な例を次に示します。 :
>>> def addone(group):
>>> group['count'] += 1
>>> return group
>>> df.groupby('class', group_keys = True).apply(addone)
>>> print(df)
class count
0 A 1
1 B 0
2 C 2
しかし、メソッドの戻り値を新しいオブジェクトに割り当てると、期待どおりに機能することがわかります。
>>> df2 = df.groupby('class', group_keys = True).apply(addone)
>>> print(df2)
class count
0 A 2
1 B 1
2 C 3