文字を時間毎に繋ぎ合せる
1秒ごとに時間を区切り、1秒間の文字を繋ぎ合わせたいと考えています。
下記のURLを数字の移動平均でなく、文字の連結で出すようにしたいです。
https://teratail.com/questions/73063
//data.csv time,val 10:00:00.111,a 10:00:00.555,b 10:00:00.888,c 10:00:01.111,d 10:00:01.222,e 10:00:01.333,f 10:00:01.555,g 10:00:01.888,h 10:00:02.111,i 10:00:02.555,j 10:00:02.888,k 10:00:03.111,l
1秒ごとのデータはバラバラで,例を参考すると10:00:00間では"a","b","c"の3個、10:00:01台では"d","e","f","g","h"の5個になります。
1秒ごとの文字データを連結させて出力したです。
例えば
time,sum 10:00:00,000,abc 10:00:01.500,defgh 10:00:03.000,l
試したこと
上記のURLを参考に下記の2つのコードを組み合わせようとしたのですが、
上手くできませんでした。
python
1#文字の連結 2m_list = [a,b,c,d,e] 3np=' '.join(map(str,m_list)) 4 5
python
1import pandas as pd 2# Data読み込み 3my_parser = lambda time: pd.datetime.strptime('2017-04-01 {}'.format(time), '%Y-%m-%d %H:%M:%S.%f') 4df = pd.read_csv('data.csv', date_parser=my_parser, parse_dates=['time']) 5# DataTimeIndexを生成 6index = pd.date_range('2017-04-01 10:00:00', '2017-04-01 10:00:30', freq='1500ms') 7# 平均を求める際の時間範囲 8range = pd.DateOffset(seconds=3) 9# 移動平均を計算 10result = pd.DataFrame([df[(df['time'] >= d) & (df['time'] <= d+range)]['val'].mean() for d in index], index=index, columns=['MovingAverage']) 11print(result)
おそらく、下記の行の .mean()の部分を文字連結の関数に変更するだけでいいはずなのですが、書き方がわからないでつまづいています。
#移動平均を計算
result = pd.DataFrame([df[(df['time'] >= d) & (df['time'] <= d+range)]['val'].mean() for d in index], index=index, columns=['MovingAverage'])
お手数ですが、助言をいただけるとありがたいです。
回答1件
あなたの回答
tips
プレビュー