外键作为QuerySet列

时间:2017-08-04 06:23:01

标签: python django pandas django-models

所以我有3个类,一个组类,一个传感器类和一个值类。 这些类大致定义如下:

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

有没有办法进行此查询并将其转换为数据集?

1 个答案:

答案 0 :(得分:0)

看一下pandas pivot_table,如果你在查询集中提取时间戳,你可以这样做:

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

生成表