大熊猫根据另一个细胞改变细胞值

Rom*_*inD 5 python dataframe python-3.x pandas

我目前正在格式化来自两个不同数据集的数据.其中一个数据集反映了按小时计算人数的观察数,第二个是基于5分钟间隔生成的wifi日志的人数.

将这两个数据帧合并为一个之后,我遇到的问题是每小时("10:00:00")有原始数据集,但其他数据(每5分钟像"10:47:14")不包括此数据.

以下是合并数据框的外观:

        room       time              con     auth  capacity    %     Count  module    size 
0       B002    Mon Nov 02 10:32:06  23      23       90       NaN    NaN   NaN        NaN`  
1       B002    Mon Nov 02 10:37:10  25      25       90       NaN    NaN   NaN        NaN`  
12527   B002    Mon Nov 02 10:00:00  NaN     NaN      90       50%    45.0  COMP30520   60`  
12528   B002    Mon Nov 02 11:00:00  NaN     NaN      90       0%     0.0   COMP30520   60`
Run Code Online (Sandbox Code Playgroud)

有没有办法让我通过数据框并从11:00:00找到有关"占用","占用","模块"和"大小"的所有信息,并将其写入所有的单元格中.同一天,小时在10:00:00到10:59:59之间?

这将允许我获得每一行的所有信息,然后允许我收集min(),max()median()基于"日"和"小时".

要回答原始数据帧的注释,这里有:
第一个数据帧:

    time                room    module      size
0   Mon Nov 02 09:00:00 B002    COMP30190   29
1   Mon Nov 02 10:00:00 B002    COMP40660   53
Run Code Online (Sandbox Code Playgroud)

第二个数据帧:

        room    time                  con   auth  capacity  %     Count
0       B002    Mon Nov 02 20:32:06   0     0     NaN       NaN   NaN
1       B002    Mon Nov 02 20:37:10   0     0     NaN       NaN   NaN
2       B002    Mon Nov 02 20:42:12   0     0     NaN       NaN   NaN
12797   B008    Wed Nov 11 13:00:00   NaN   NaN   40        25    10.0
12798   B008    Wed Nov 11 14:00:00   NaN   NaN   40        50    20.0
12799   B008    Wed Nov 11 15:00:00   NaN   NaN   40        25    10.0
Run Code Online (Sandbox Code Playgroud)

这就是将这两个数据帧合并在一起的方式:

DFinal = pd.merge(DF, d3, left_on=["room", "time"], right_on=["room", "time"], how="outer", left_index=False, right_index=False)
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激.

非常感谢,

-Romain

Rom*_*inD 0

实际上我可以通过以下方式解决这个问题:

第一:使用“时间”功能分区来生成两个附加列,一个用于“时间”列中显示的日期,一个用于“时间”列中显示的小时。我使用 lambda 函数来获取这些列:

df['date'] = df['date'].map(lambda x: x[10:-6])
df['time'] = df['time'].map(lambda x: x[8:-8])
Run Code Online (Sandbox Code Playgroud)

基于这两列新列,我修改了数据帧的合并方式。

这是我用来修复它的代码:

dataframeFinal = pd.merge(dataframe1, dataframe2, left_on=["room", "date", "hour"],
                right_on=["room", "date", "hour"], how="outer",
                left_index=False, right_index=False, copy=False)
Run Code Online (Sandbox Code Playgroud)

合并后,我最终得到了重复的时间列(“time_y”和“time_x”)。
因此,我替换了 NaN 值,如下所示:

dataframeFinal.time_y.fillna(dataframeFinal.time_x, inplace=True)
Run Code Online (Sandbox Code Playgroud)

现在“time_y”列包含所有时间值,不再是 NaN。我不需要“time_x”列,因此我将其从数据框中删除

dataframeFinal = dataframeFinal.drop('time_x', axis=1)
Run Code Online (Sandbox Code Playgroud)