dfって、1行50列のdataframeにint型が入っているのかと思いましたが、dataframeではなくて本当にただの int 配列なんですね
python
1df = pd.DataFrame([{'hoge1': 1, 'hoge2': 2, 'hoge3': 3}])
2[sum(grp) for _, grp in groupby(df)][:-1]
3# だとエラーになり、
4
5df = [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9]
6[sum(grp) for _, grp in groupby(df)][:-1]
7# だと結果が返ってきました。
さて肝心の処理内容は、groupby使ったことがないのでいまいちわかりませんが、次の動作を見ると大体動きが想像できそうです。
python
1df2 = [1,2,3,4,5,6,7,8,9,0,1,2,2,3,3,3,9,9,9,9,9]
2for _, grp in groupby(df2):
3 print(sum(grp))
4
51
62
73
84
95
106
117
128
139
140
151
164
179
1845
上記の結果を見る限りでは、groupby をループさせてその結果をイテレーション毎に sum すると、隣り合った値が一致するときだけ足し合わせてくれるみたいですね。
2, 2
3, 3, 3
9, 9, 9, 9, 9
が 4, 9, 45 になっていることから想像できます。
そして、その結果に対して [:-1] をつけることによって、配列末尾の値を削除しているようです。
[:-1] の動作は次の動きから想像できます
python
1[1,2,3][:-1]
2-> [1, 2]
リスト内包表記については、もう疲れたので他の方にお任せします...
こういう記事で勉強するのはありだと思います
pythonの内包表記を少し詳しく