【问题标题】:python combining 26 dataframes of different timestamps and same columnspython结合26个不同时间戳和相同列的数据帧
【发布时间】:2019-07-26 00:01:29
【问题描述】:

美国的数据库以.csv 格式接收来自世界各地的某一天信息。有 15 天的数据,来自 26 个地方。总共 15x26 = 390 个数据帧。此外,26 个地方有一个共同的参考数据框。现在,我想将 390 + 1 个参考数据帧合并为一个。我在这里给出了我的问题的一个示例:

plA_d1df =        ### place A day1 dataframe
                       Adata
2019-01-10 07:35:22   10
2019-01-10 08:15:17   20

plB_d1df = 
                       Bdata
2019-01-10 07:38:45   30
2019-01-10 08:18:57   40

ptA_d2df = 
                       Adata
2019-01-21 07:35:42   50
2019-01-21 08:15:17   60

ptB_d2df = 
                       Bdata
2019-01-21 07:39:04   70
2019-01-21 08:19:22   80

reference = 
                          ref
2019-01-10 07:35:00     500
2019-01-10 07:38:00     530
2019-01-10 08:15:00     560
2019-01-10 08:18:00     590
2019-01-21 07:35:00     610
2019-01-21 07:39:00     640
2019-01-21 08:15:00     670
2019-01-21 08:19:00     700

以上所有地点和参考的数据应结合到地点-A的时间戳,如下所示:

combdf = 
  datetime            ref0  Adata     ref1   Bdata  
2019-01-10 07:35:22    500   10      530    30
2019-01-10 08:15:17    560   20      590    40  
2019-01-21 07:35:42    610   50      640    70
2019-01-21 08:15:17    670   60      700    80 

参考解决的answer后我实现了以下代码:

biglist = [[plA_d1df,plB_d1df],[plA_d2df,plB_d2df]] ## dataframes are in a nested list of list
l = []
s1 = []
### refdf = reference dataframe
for i in range(0,len(biglist),1):
    for j in range(0,len(biglist[i]),1):       
            s1=refdf.reindex(biglist[i][j].index,method='nearest')            
        if j==0:
            l.append(s1.join(biglist[i][j]))
        else:
            l.append(s1.join(biglist3[i][j]).reindex(l[0].index,method='nearest'))
combdf = pd.concat(l,1) 

以上代码运行成功。组合数据帧combdf 的时间戳与位置 A 匹配,这正是我想要的。但是同一个地方的列没有合并。相反,每天创建单独的列。所以我最终有 8 列,而不是 4 列,大部分都填满了nan。 我现在的输出是:

combdf = 
  datetime            ref0  Adata   ref1   Bdata   ref0  Adata   ref1   Bdata  
2019-01-10 07:35:22    500   10     530    30       nan    ..          nan
2019-01-10 08:15:17    560   20     590    40       nan    ..          nan
2019-01-21 07:35:42    nan    ..          nan       610   50     640    70
2019-01-21 08:15:17   nan    ..          nan        670   60     700    80 

我必须进行哪些更正才能将列合并到相同的列中。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    把你的代码改成

    biglist = [[df1,df2],[df3,df4]] ## dataframes are in a nested list of list
    l = []
    s1 = []
    for i in range(0,len(biglist),1):
        l1=[]
        for j in range(0,len(biglist[i]),1):
                s1=refdf.reindex(biglist[i][j].index,method='nearest')
                if j==0:
                    l1.append(s1.join(biglist[i][j]))
                else:
                    l1.append(s1.join(biglist[i][j]).reindex(l1[0].index,method='nearest'))
        l.append(pd.concat(l1,axis=1))
    combdf = pd.concat(l,0)
    combdf
    Out[252]: 
                         ref  Adata  ref  Bdata
    2019-01-10 07:35:22  500     10  530     30
    2019-01-10 08:15:17  560     20  590     40
    2019-01-21 07:35:42  610     50  640     70
    2019-01-21 08:15:17  670     60  700     80
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2019-11-19
    • 2021-09-05
    • 1970-01-01
    • 2021-11-20
    • 2021-10-31
    相关资源
    最近更新 更多