2016-11-10 8 views
0

私はintまたはfloatの加重平均をdatetimeフィールドとする方法を見つけようとしています。私はdatetimeintに変換し、数学を行い、datetimeに変換する行について考えています。しかし、そうする方法がわからない。どんな助けも大歓迎です。DataFrame内のInt/Float加重平均日時

私はここではっきりしていたはずです。実際の問題は、今私はIdをGROUPBYとQty加重StartTimeを取るしようとしています。この

>>> df1 = pd.DataFrame({'Date': {0: '2016-10-11', 1: '2016-10-11', 2: '2016-10-11', 3: '2016-10-11', 4: '2016-10-11',5: '2016-10-11'}, 'Qty': {0: 100, 1: 3232, 2: 4232, 3: 4322, 4: 666, 5: 98}, 'StartTime': {0: '08:00:00.241', 1: '08:00:00.243', 2: '12:34:23.563', 3: '08:14:05.908', 4: '18:54:50.100', 5: '10:08:36.657'},'Id':{0:'abc',1:'abc',2:'bcd',3:'bcd',4:'abc',5:'bcd'}}) 
>>> df1 
     Date Id Qty  StartTime 
0 2016-10-11 abc 100 08:00:00.241 
1 2016-10-11 abc 3232 08:00:00.243 
2 2016-10-11 bcd 4232 12:34:23.563 
3 2016-10-11 bcd 4322 08:14:05.908 
4 2016-10-11 abc 666 18:54:50.100 
5 2016-10-11 bcd 98 10:08:36.657 
>>> df1['StartTime'] = pd.to_datetime(df1['Date'] + ' ' + df1['StartTime']) 
>>> df1['StartTime'][0] 
Timestamp('2016-10-11 08:00:00.241000') 

ような何かを行うことです。 StartTimeにはマイクロ秒のコンポーネントも含まれています。
次はStartTime列の各項目がTimestampであっても、動作していないよう:

>>> (df1.groupby['Id']).apply(lambda x:np.average(x['StartTime'], weights=x['Qty'])) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'instancemethod' object has no attribute '__getitem__' 
+1

タイムスタンプを使用することができます。 –

答えて

1

あなたはあなたの平均複数datetimeの値に使用できる整数を与えることtotal_seconds()を使用することができます。

def avg_date(lst): 
    epoch = datetime.datetime(1900, 1, 1) 
    seconds_per_day = 3600 * 24 
    avg = sum((d - epoch).total_seconds() for d in lst)/len(lst) 
    return epoch + datetime.timedelta(avg // seconds_per_day, avg % seconds_per_day) 
+0

あなたのお返事ありがとうございます@マーク。しかし、私はマイクロ秒を含める必要があります。また、以前私は私の質問でこれを 'DataFrame'カラムに適用する必要があることを十分に明示していませんでした。 – Rahul

0

あなたはいくつかのコードは、より良いあなたの問題を示す役立つ

import datetime 
dt1 = datetime.datetime.now() 
dt2 = datetime.datetime(1980, 1, 1) 
timestamp1 = dt1.timestamp() 
timestamp2 = dt2.timestamp() 
timestamp_avg = (timestamp2+timestamp1)/2 
dt_avg = datetime.datetime.fromtimestamp(timestamp_avg) 
print(dt_avg) 
+0

あなたのお返事ありがとうございます@ SergeyLebedev。私は私の質問で、これを 'DataFrame'カラムに適用する必要があることを十分に明示していませんでした。列は 'TimeStamp'ですが、これはうまくいかないようです。 – Rahul