有没有一种方法可以创建关系熊猫数据帧?

时间:2019-05-01 10:46:33

标签: python pandas bitmask

由于无法正确填充位掩码的数据帧,我正在努力使我的pandas df成为我所需的格式。

我有许多数据帧:

drawable-xxhdpi-这是从.csv读取的内容

plot_d1_sw1

timestamp switchID deviceID count 0 2019-05-01 07:00:00 1 GTEC122277 1 1 2019-05-01 08:00:00 1 GTEC122277 1 3 2019-05-01 10:00:00 1 GTEC122277 3 -这是最近12个小时,是数据是否显示在d1_sw1

中的条件
filt

我尝试屏蔽此内容,并使用以下方法将count列拉入任何 timestamp num 0 2019-05-01 12:00:00 False 1 2019-05-01 11:00:00 False 2 2019-05-01 10:00:00 True 3 2019-05-01 09:00:00 False 4 2019-05-01 08:00:00 True 5 2019-05-01 07:00:00 True 6 2019-05-01 06:00:00 False 7 2019-05-01 05:00:00 False 8 2019-05-01 04:00:00 False 9 2019-05-01 03:00:00 False 10 2019-05-01 02:00:00 False 11 2019-05-01 01:00:00 False 值:

True

这给了我

mask_d1_sw1 = d1_sw1.num == False
d1_sw1.loc[mask_d1_sw1, column_name] = 0

i=0
for row in plot_d1_sw1.itertuples():
    mask_d1_sw1 = d1_sw1.num == True
    d1_sw1.loc[mask_d1_sw1, column_name] = plot_d1_sw1['count'].values[i]
    print(d1_sw1)
    i = i + 1

...我知道这是因为我正在遍历 timestamp num 0 2019-05-01 12:00:00 0 1 2019-05-01 11:00:00 0 2 2019-05-01 10:00:00 3 3 2019-05-01 09:00:00 0 4 2019-05-01 08:00:00 3 5 2019-05-01 07:00:00 3 6 2019-05-01 06:00:00 0 7 2019-05-01 05:00:00 0 8 2019-05-01 04:00:00 0 9 2019-05-01 03:00:00 0 10 2019-05-01 02:00:00 0 11 2019-05-01 01:00:00 0 的{​​{1}}列,但是我一生都无法解决如何合理地填充它以获得结果:< / p>

count

我如何实现这一结果?

1 个答案:

答案 0 :(得分:0)

一种方法是在时间戳记上merge,然后将布尔值与count相乘:

df = d1_sw1.merge(plot_d1_sw1, how='left', on='timestamp')
df['num'] = df.num.mul(df['count'].fillna(0)).astype(int)
df[['timestamp', 'num']]

哪个给:

         timestamp        num
0   2019-05-01-12:00:00    0
1   2019-05-01-11:00:00    0
2   2019-05-01-10:00:00    3
3   2019-05-01-09:00:00    0
4   2019-05-01-08:00:00    1
5   2019-05-01-07:00:00    1
6   2019-05-01-06:00:00    0
7   2019-05-01-05:00:00    0
8   2019-05-01-04:00:00    0
9   2019-05-01-03:00:00    0
10  2019-05-01-02:00:00    0
11  2019-05-01-01:00:00    0