2017-08-04 57 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()

生成表