2016-05-30 11 views
0

でテーブルをマージするには、私は概念的に、このようになります。データフレームを持っている:Pythonのパンダ - 自体

ID SUM Stime Etime  
3 10.0 18:00:00 18:09:59 
2 12.0 18:15:00 18:26:59 
3 3.0 18:36:00 18:38:59 
4 3.0 18:36:00 18:38:59 
5 59.0 18:00:00 18:58:59 
12 10.0 17:00:00 17:09:59 
12 16.0 18:24:00 18:39:59 
7 16.0 18:24:00 18:39:59 
8 19.0 18:40:00 18:58:59 
12 19.0 18:40:00 18:58:59 
10 19.0 18:40:00 18:58:59 
11 3.0 18:03:00 18:05:59 
12 11.0 18:59:00 18:09:59 

STIMEとETIME COLSは、DateTime型からです。

SUMは、StimeとEtimeの間の分数です。

私がする必要があるのは、特定の人物(ID)の場合、終了時刻の直後にStimeが来たら、2行を単位にしてSUMを更新するようにテーブルを更新することです。例えば

ここでは、ID=12ための第1 ETIMEは18:39:59 であり、第二STIMEは18:40:00ある - 右の午前18時39分59秒後に来る、また、第二ETIMEが18:58:59であり、第3 STIMEが18:59:00である - 右の到来します18:58:59以降 - 私は3行をユニット化し、この人のSUMを更新して46(16 + 19 + 11)にしたいと思います。

私はmergeを使用しようとしましたが、問題はそれが正確に2行だけではなく、3以上で正しくマージされていることです。

+0

「ID」でグループ化し、Etime-Stimeの違いを合計する必要があります。その後、元のdfに参加することができます。 – knagaev

+0

しかし、時間が連続している場合にのみ、それらを合計したいと思います。例えばここでは、他のレコードと連続していないので、 'ID = 12'の最初のレコードを合計したくありません。 –

答えて

0

Beni - 私はコメントする評判がないので、お詫び申し上げます。私はあなたの前の質問に答えていると確信しています。ここで解決の必要性を避ける必要があります:Python Pandas - combining 2 lines from data frame - with condition

あなたはそれを確認できますか?

+0

こんにちは、努力していただきありがとうございます。あなたのソリューションは近いですが、 'Stime'と' Etime'は更新されません。 '1220760 A 35 18:40:00 18:58:59' - ' C'列は正しいですが、 'Etime'と' Stime'もそうではありません。よりエレガントで、1〜5行で計算する関数が必要です。 –

+0

これはStimeとEtimeを行で更新するように指定したことがないからです.Cのみでなければなりません。 StimeとEtimeをどのように更新する必要がありますか? – tompiler

+0

CはStimeとEtimeの違いですので、(UNTUBUの解と同様に) 'C'の値に従って更新する必要があります。 –

0
d = {'ID' : [1, 2, 3,12, 4,12,5,12],'SUM' : [4, 3, 2, 16,1,19,2,11]} 
df =pd.DataFrame(d) 
>>> df 
    ID SUM 
0 1 4 
1 2 3 
2 3 2 
3 12 16 
4 4 1 
5 12 19 
6 5 2 
7 12 11 

df.groupby(['ID']).sum() 


    SUM 
ID  
1  4 
2  3 
3  2 
4  1 
5  2 
12 46 
+0

それは私が後にしていることではありません...時間が連続している場合は、合計する必要があります。 'ID = 12 'の場合、私が説明したように、最初のレコードを無視するべきです。 –