2017-08-04 56 views
0

所以我有3個類,一個組類,一個傳感器類和一個值類。 這些類粗略的定義是這樣的:外鍵作爲QuerySet列

class SensorGroup(models.Model): 
    name = models.CharField(max_length=100) 
    logging_on = models.BooleanField(default=False) 

class Sensor(models.Model): 
    device_id = models.CharField(max_length=25, primary_key=True) 
    name = models.CharField(max_length=25, blank=False) 
    last_updated = models.DateTimeField(auto_now=True) 
    sensor_group = models.ForeignKey(SensorGroup, related_name='sensors') 

class Value(models.Model): 
    sensor = models.ForeignKey(Sensor, related_name='values') 
    time = models.DateTimeField(auto_now_add=True) 
    value = models.FloatField(blank=False) 

的值是在20秒的時間間隔增加了對每個傳感器。 我希望把它變成一個表像這樣用pandas.DataFrame.from_records()說,第1組:

| sensor_1 | sensor_2 | sensor_3 | timestamp | 
|----------+----------+----------+--------------| 
|  1.5 |  2.0 |  1.0 | 12:33 2/4/17 | 
|----------+----------+----------+--------------| 
|  2.0 |  1.5 |  3.3 | 12:34 2/4/17 | 
.... 

我試過到目前爲止:

qs = Sensors.all().values('name', 'values__value') 
df = pd.DataFrame.from_records(list(qs)) 
print(df) 

息率

   name values__value 
0   sensor_1   0.0 
1   sensor_1   1.0 
2   sensor_1   2.0 
3   sensor_2   0.0 
4   sensor_2   1.0 
5   sensor_2   2.0 

有一種使這個查詢並將其轉換爲數據集的方法?

+0

你想要的傳感器值按「時間」屬性的值分組? – ikkuh

+0

按名稱屬性分組並按時間屬性排序。但我想按時間屬性分組也是一樣 –

回答

0

看一看大熊貓pivot_table,如果在查詢集提取時間戳爲好,然後你可以這樣做:

table = pd.pivot_table(df, values='values__value', index=['timestamp'], columns=['name']).reset_index()

生成表