首页 文章

根据时间标准将数据框中多列的值传输到另一个数据框中的新列

提问于
浏览
0

我是Python的新手,并开始意识到它可能会进行严重的数字运算 .

目前,我希望在pandas数据框(df1)中创建一个新列,并使用另一个数据帧(df2)中24列之一(名为 0.0 - 23.0 )的数值填充它 . 每列 0.0 - 23.0 代表小时数( 00.00-00.5901.00-01.59 等) . 我想根据时间标准执行我的操作 .

df1中有一列 time ,日期时间值的格式为 YYYY-mm-dd HH:MM:SS . 此列不是df1的索引列,因此多行可能具有相同的'time'值 . df1总共包含300,000行 .

df2的索引是 date 列,其中包含 YYYY-mm-dd 形式的值 . df2涵盖3年,因此总共包含大约1,200行 .

例如,如果df1中 time 的值为 2011-01-01 12:01:20 ,我想在df1中使用df2中 12.0 列中的数值填充df1中的新列,对应于索引为 2011-01-01 的行 .

我试图合并两个数据帧,并获得一个包含df1的新数据帧,以及与正确日期匹配的 0.0 - 23.0 列 . 我通过将'time'转换为 YYYY-mm-dd 格式并应用.merge来完成此操作 . 但是,这个数据帧有点太乱了 .

此外,我想编写一个评估df1中新列的函数,以允许向后控制来自df2的导入值是正确的 .

DF1

KEY    time
252752 2011-01-01 04:20:00   
281789 2011-01-02 01:18:00   
242674 2011-01-03 03:08:00   
189497 2011-01-04 00:17:00   
189498 2011-01-05 05:31:00   
...    ...

DF2

date         0.0         1.0         2.0         3.0         4.0         5.0        ...   23.0
2011-01-01   0.919355    0.925806    0.929032    0.932258    0.938710    0.953947   ...   1.037975
2011-01-02   1.026144    1.019608    1.022876    1.032680    1.035948    1.035948   ...   0.919355
2011-01-03   1.025316    1.034810    1.037975    1.034810    1.044304    1.044304   ...   1.018987
2011-01-04   1.018987    1.025316    1.031646    1.044304    1.047468    1.050633   ...   0.932258
2011-01-05   1.018987    1.018987    1.018987    1.022152    1.031646    1.037975   ...   0.953947
...          ...         ...         ...         ...         ...         ...        ...   ...

期望的结果

KEY    time                  value
252752 2011-01-01 04:20:00   0.938710
281789 2011-01-02 01:18:00   1.019608
242674 2011-01-03 03:08:00   1.034810
189497 2011-01-04 00:17:00   1.018987
189498 2011-01-05 05:31:00   1.037975
...    ...                   ...

1 回答

  • 0

    我不确定这是否有帮助...但这就是我写它的方式:

    ### just to have your test data
        df1_val =     ("252752 2011-01-01 04:20:00",   
                        "281789 2011-01-02 01:18:00",   
                        "242674 2011-01-03 03:08:00",   
                        "189497 2011-01-04 00:17:00",   
                        "189498 2011-01-05 05:31:00") 
        df1 = {}
        for row in df1_val:
            df1[row[0:5]]= (row[7:17], row[18:])
    
        df2_val = ( "2011-01-01   0.919355    0.925806    0.929032    0.932258    0.938710    0.953947",
                    "2011-01-02   1.026144    1.019608    1.022876    1.032680    1.035948    1.035948",
                    "2011-01-03   1.025316    1.034810    1.037975    1.034810    1.044304    1.044304",
                    "2011-01-04   1.018987    1.025316    1.031646    1.044304    1.047468    1.050633",
                    "2011-01-05   1.018987    1.018987    1.018987    1.022152    1.031646    1.037975")
    
        df2 = {}
        for row in df2_val:
            date, zero, one, two, three, four, five = row.split("   ")
            df2[date] = (zero, one, two, three, four, five)
    
        #### build the result dict
        result = {}    
    
        for key in df1:
            hour =  int(df1[key][1][:2])
            date = df1[key][0]
            result[key] = (df1[key][0] + "   " + df1[key][1], df2[date][hour], )
            print key
            print result[key]
    

相关问题