如何在没有重复的情况下更新da Pandas Panel

时间:2019-05-10 17:07:45

标签: python pandas dataframe

目前,我正在为赛车应用程序开发Livetiming软件。因此,我必须抓取Livetiming网页并将数据复制到大数据框。该数据框是我要制作的几个图表的来源。为了使我的数据框保持最新状态,我不得不经常抓取该网页。

我可以下载数据并将其另存为Panda.Dataframe。但是我的问题是从下载的DataFrame到包含所有数据的Big Dataframe。

import pandas as pd
import numpy as np
df1= pd.DataFrame({'Pos':[1,2,3,4,5,6],'CLS':['V5','V5','V5','V4','V4','V4'],
                 'Nr.':['13','700','30','55','24','985'],
                 'Zeit':['1:30,000','1:45,000','1:50,000','1:25,333','1:13,366','1:17,000'],
                 'Laps':['1','1','1','1','1','1']})

df2= pd.DataFrame({'Pos':[1,2,3,4,5,6],'CLS':['V5','V5','V5','V4','V4','V4'],
                 'Nr.':['13','700','30','55','24','985'],
                 'Zeit':[np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,],
                 'Laps':['2','2','2','2','2','2']})
df3= pd.DataFrame({'Pos':[1,2,3,4,5,6],'CLS':['V5','V5','V5','V4','V4','V4'],
                 'Nr.':['13','700','30','55','24','985'],
                 'Zeit':['1:31,000','1:41,000','1:51,000','1:21,333','1:11,366','1:11,000'],
                 'Laps':['2','2','2','2','2','2']})
df1.set_index(['CLS','Nr.','Laps'],inplace=True)
df2.set_index(['CLS','Nr.','Laps'],inplace=True)
df3.set_index(['CLS','Nr.','Laps'],inplace=True)

df1显示了前几圈的数据框。 df2在第二圈显示了一个数据框。膝部未完成,所以我有男。 df3在第二圈结束后显示了一个数据框。

我的目标是每班每辆车每圈只剩下一行。 我有一个问题,就是我的重复项不完整或所有日期都被覆盖。

我希望有人可以帮助我解决这个问题。

谢谢你。

MrCrunsh

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您的问题是第二圈的数据重叠:该圈还在进行中的信息和结束后的信息。如果您想将给定单圈的所有信息都放在一行中,建议您使用多索引列或更改列名以反映单圈之间和之后的测量之间的差异。

df = pd.concat([df1, df3])
df = pd.concat([df, df2], axis=1, keys=['after', 'during'])

结果将如下所示:

             after           during
               Pos      Zeit    Pos Zeit
CLS Nr. Laps
V4  24  1        5  1:13,366    NaN  NaN
        2        5  1:11,366    5.0  NaN
    55  1        4  1:25,333    NaN  NaN
        2        4  1:21,333    4.0  NaN
    985 1        6  1:17,000    NaN  NaN
        2        6  1:11,000    6.0  NaN
V5  13  1        1  1:30,000    NaN  NaN
        2        1  1:31,000    1.0  NaN
    30  1        3  1:50,000    NaN  NaN
        2        3  1:51,000    3.0  NaN
    700 1        2  1:45,000    NaN  NaN
        2        2  1:41,000    2.0  NaN