我想按时间戳对一组时间序列数据进行分组,其中给定组中的每一行都包含一个名为“名称”的列,然后将这些名称转换为列,并使用每个列的第一个非空值生成一行名称作为该列的值。
例如,给定这样的DataFrame:
+-----+---------+---------+
| ts | name | value |
+-----+---------+---------+
| 1 | "temp" | "72" |
+-----+---------+---------+
| 1 | "humid" | "30" |
+-----+---------+---------+
| 1 | "fan" | "50%" |
+-----+---------+---------+
| 2 | "temp" | "70" |
+-----+---------+---------+
| 2 | "humid" | "40" |
+-----+---------+---------+
| 2 | "fan" | "30%" |
+-----+---------+---------+
| 3 | "temp" | "68" |
+-----+---------+---------+
| 3 | "humid" | "50" |
+-----+---------+---------+
| 3 | "fan" | "20%" |
+-----+---------+---------+
我想要这个结果:
+-----+---------+--------+--------+
| ts | temp | humid | fan |
+-----+---------+--------+--------+
| 1 | "72" | "30" | "50%" |
+-----+---------+--------+--------+
| 2 | "70" | "40" | "30%" |
+-----+---------+--------+--------+
| 3 | "68" | "50" | "20%" |
+-----+---------+--------+--------+
我显然可以绕过名称,这导致每个名称/值对有一行,但是后来我没有“折叠”这些行以消除空值,并且没有一个行可以关联给定时间戳记的所有值一起。我尝试了.pivot("name").agg(first("value", true))
,但是没有用。