2017-12-05 8 views
0

私は、最も古いものから日付順にテーブルをソートする必要があります。合計フィールドは、nameフィールドとkindフィールドをグループ化し、合計を適用することによって作成されます。今度は、各行について、同じname-kindグルーピングで残りの時間を計算する必要があります。パンダ:グルーピングの残り時間を計算する

csvファイルは、以下のようになります。

date  name kind duration total remaining 
1-1-2017 a 1 10  100 ? should be 90 
2-1-2017 b 1 5  35 ? should be 30 
3-1-2017 a 2 3  50 ? should be 47 
4-1-2017 b 2 1  25 ? should be 24 
5-1-2017 a 1 8  100 ? should be 82 
6-1-2017 b 1 2  35 ? should be 33 
7-1-2017 a 2 3  50 ? should be 44 
8-1-2017 b 2 6  25 ? should be 18 
... 

私の質問はnamekindによってグループ化されたDataFrameを持ちながら、私は残りの値を計算行う方法ですか?

私の最初のアプローチは、列をシフトし、そのように期間からお互いに値を追加することでした:

df['temp'] = df.groupby(['name', 'kind'])['duration'].apply(lambda x: x.shift() + x) 

、その後:

df['duration'] = df.apply(lambda x: x['total'] - x['temp'], axis=1) 

しかし、期待通りに動作しませんでした。

これを行うにはクリーンな方法がありますか、何とかしてiloc, ix, locを使用していますか?

ありがとうございました。

df["cumsum"] = df.groupby(['name', 'kind'])["duration"].cumsum() 
df["remaining"] = df["total"] - df["cumsum"] 

は多分インデックスをリセットして注意しながら:

答えて

1

あなたのような何かを行うことができます。

+0

これは完璧に働いた、ありがとう! –