正确使用groupby功能

时间:2018-11-27 03:57:32

标签: pandas python-2.7 dataframe group-by

我有一个名为df1的数据帧,如下所示:

details                endFrame id  indexID object  startFrame
List of dictionaries 1   1111   78    0    Motorbike    1
List of dictionaries 2   3647   78    0    Motorbike    1112
List of dictionaries 3   3678   78    0    Motorbike    3649
List of dictionaries 4   704    120   3    Pedestrian   66
List of dictionaries 5   817    120   3    Pedestrian   705
List of dictionaries 6   922    141   5    Car          818

字典列表如下:

[{'y2': 627, 'frame': 1, 'visibility': 0, 'y1': 603, 'score': 1, 'x2': 770, 'x1': 759, 'class': 1}, {'y2': 623, 'frame': 2, 'visibility': 0, 'y1': 599, 'score': 1, 'x2': 777, 'x1': 766, 'class': 1},....]

我想做的是将具有相同indexID的行合并在一起。另外,我必须将每个词典列表扩展为一个长列表,而不是在“详细信息”单元格中包含多个列表。换句话说,一旦合并,详细信息单元将具有非常长的词典列表。

我不必担心df1中“ endframe”,“ id”和“ startframe”列中发生的情况。但是,每个合并的indexID仍必须具有一个Object。请注意,df1中具有相同indexID的每一行都将具有相同的对象。

示例输出:

details                       endFrame  id  indexID object  startFrame
List of dictionaries 1,2 and 3   1111   78    0    Motorbike    1
List of dictionaries 4 and 5      704   120   3    Pedestrian   66
List of dictionaries 6            922   141   5    Car          818

1 个答案:

答案 0 :(得分:1)

WITH CTE (DateTime, Compteur, Valeur) AS 


(
SELECT DateTime, Compteur, CASE WHEN Valeur<0 OR Valeur IS NULL THEN 0 ELSE Valeur END AS Valeur
FROM
(
    SELECT  DateTime, TagName AS Compteur
    ,       Value - coalesce( LAG(Value, 1, NULL) OVER (PARTITION BY TagName ORDER BY DateTime),0) AS Valeur
    FROM History 
    WHERE  TagName IN ('A','B')
    AND DateTime >='2018-12-31 23:59:00'
    AND wwRetrievalMode='Delta'
)t
WHERE t.DateTime >='2018-12-31 23:59:59'
)
SELECT DateTime, Compteur, Valeur INTO #tempcounters from CTE