とりあえず、こんな感じでどうでしょうか?
基本的にPandas上で処理しております。
コメント(実行結果)を入れた為長くなってしまいましたが、実際は数行で記述できます。
Python
1import pandas as pd
2import numpy as np
3
4machine = '''
5[
6{"machine":[{"No":"G1"}],"time":1494824607024},
7{"machine":[],"time":1494824607025},
8{"machine":[{"No":"G1"},{"No":"F2"}],"time":1494824607026},
9{"machine":[{"No":"F2"}],"time":1494824607026},
10{"machine":{"No":"E3"},"time":1494824607027}
11]
12'''
13
14# 元データ
15df = pd.read_json(machine)
16print(df)
17# => machine time
18# 0 [{'No': 'G1'}] 1494824607024
19# 1 [] 1494824607025 #<= 空
20# 2 [{'No': 'G1'}, {'No': 'F2'}] 1494824607026
21# 3 [{'No': 'F2'}] 1494824607026 #<=重複
22# 4 {'No': 'E3'} 1494824607027 #<=リスト形式でない
23
24# index:4 のように リスト形式ではない時はリスト形式に変換
25df['machine'] = df['machine'].apply(lambda d:d if isinstance(d,list) else [d])
26print(df)
27# => machine time
28# 0 [{'No': 'G1'}] 1494824607024
29# 1 [] 1494824607025 #<= 空
30# 2 [{'No': 'G1'}, {'No': 'F2'}] 1494824607026
31# 3 [{'No': 'F2'}] 1494824607026 #<=重複
32# 4 [{'No': 'E3'}] 1494824607027 #<=リスト化
33
34# セル内のリストを行に展開する
35df = pd.DataFrame({'time':np.repeat(df['time'].values, df['machine'].str.len())}).assign(machine=np.concatenate(df['machine'].values))
36print(df)
37# => time machine
38# 0 1494824607024 {'No': 'G1'}
39# 1 1494824607026 {'No': 'G1'}
40# 2 1494824607026 {'No': 'F2'} #<=重複
41# 2 1494824607026 {'No': 'F2'} #<=重複
42# 3 1494824607027 {'No': 'E3'}
43
44# セル内のdict形式を展開
45df['machine'] = df['machine'].apply(lambda d:d['No'])
46print(df)
47# => time machine
48# 0 1494824607024 G1
49# 1 1494824607026 G1
50# 2 1494824607026 F2 #<=重複
51# 2 1494824607026 F2 #<=重複
52# 3 1494824607027 E3
53
54# 重複削除
55df = df.drop_duplicates(['machine', 'time'])
56print(df)
57# => time machine
58# 0 1494824607024 G1
59# 1 1494824607026 G1
60# 2 1494824607026 F2
61# 4 1494824607027 E3
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/31 09:30