私は次のようなデータセットを持っています:
time(secs) setup
40 setup1
30 setup1
20 setup1
10 setup2
20 setup2
10 setup1
30 setup1
30 setup2
40 setup2
10 setup3
20 setup3
次のような値にpandas dataframe
応じて、行の合計を取得したいと思いsetup
ます。
time(secs) setup
90 setup1
30 setup2
40 setup1
70 setup2
30 setup3
しかし、groupby()
関数を使用することによって:
df.groupby(['setup']).sum()
私は次のように結果を得ています:
setup time
setup1 130
setup2 100
setup3 30
この問題の解決にご協力ください...
ありがとうございました !!!
GROUPBYと集計sum
でfirst
ヘルパーによってSeries
によってcumsum
によって比較したのshift
と:Series.ne
(!=)
df1 = (df.groupby(df['setup'].ne(df['setup'].shift()).cumsum(), as_index=False)
.agg({'time(secs)':'sum', 'setup':'first'}))
print (df1)
time(secs) setup
0 90 setup1
1 30 setup2
2 40 setup1
3 70 setup2
4 30 setup3
詳細:
print (df['setup'].ne(df['setup'].shift()).cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
Name: setup, dtype: int32
新しい列を使用した同様のソリューション:
df['groups'] = df['setup'].ne(df['setup'].shift()).cumsum()
print (df)
time(secs) setup groups
0 40 setup1 1
1 30 setup1 1
2 20 setup1 1
3 10 setup2 2
4 20 setup2 2
5 10 setup1 3
6 30 setup1 3
7 30 setup2 4
8 40 setup2 4
9 10 setup3 5
10 20 setup3 5
df1 = (df.groupby('groups')
.agg({'time(secs)':'sum', 'setup':'first'})
.reset_index(drop=True))
df1 = (df.groupby(['groups', 'setup'])['time(secs)'].sum()
.reset_index(level=0, drop=True)
.reset_index())
print (df1)
time(secs) setup
0 90 setup1
1 30 setup2
2 40 setup1
3 70 setup2
4 30 setup3
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加