我正在使用在此数据框的sourceusername列中具有“-”而在sourcehostname列中具有“ None”的数据集。通常,台式机的IP保持不变,而笔记本电脑的IP则保持不变。我正在尝试使用我所掌握的信息来填补空白。该数据框具有计算机,用户将在其中注销,新用户将登录并创建代理流量。数据框如下所示:
df
sourceusername sourcehostname sourceaddress destinationhostname
0 1111 Computer_1 10.11.2.22 khms0.google.com
1 1111 Computer_1 10.11.2.22 photos.wavebid.com
2 1112 Computer_2 10.11.2.23 www.msn.com
3 1113 Computer_3 10.11.2.24 log.pinterest.com
4 1113 Computer_3 10.11.2.24 apx.moatads.com
5 - None 10.11.2.23 pixabay.com
6 - Computer_3 10.11.2.24 rb.adnxs.com
7 1111 None 10.11.2.22 dt.adsafeprotected.com
8 1111 Computer_1 10.11.2.22 ad.doubleclick.net
9 - None 10.11.2.23 s0.2mdn.net
10 1114 Computer_1 10.11.2.22 khms2.google.com
11 - None 10.11.2.22 photos.wavebid.com
12 1113 Computer_3 10.11.2.24 log.pinterest.com
所需的输出:
df
sourceusername sourcehostname sourceaddress destinationhostname
0 1111 Computer_1 10.11.2.22 khms0.google.com
1 1111 Computer_1 10.11.2.22 photos.wavebid.com
2 1112 Computer_2 10.11.2.23 www.msn.com
3 1113 Computer_3 10.11.2.24 log.pinterest.com
4 1113 Computer_3 10.11.2.24 apx.moatads.com
5 1112 Computer_2 10.11.2.23 pixabay.com
6 1113 Computer_3 10.11.2.24 rb.adnxs.com
7 1111 Computer_1 10.11.2.22 dt.adsafeprotected.com
8 1111 Computer_1 10.11.2.22 ad.doubleclick.net
9 1112 Computer_2 10.11.2.23 s0.2mdn.net
10 1114 Computer_1 10.11.2.22 khms2.google.com
11 1114 Computer_1 10.11.2.22 photos.wavebid.com
12 1113 Computer_3 10.11.2.24 log.pinterest.com
如您所见,索引10的用户“ 1114”是“ Computer_1”上的新用户。解决丢失数据的最佳方法是什么?
答案 0 :(得分:1)
以下给出了已发布的所需输出:
将sourceaddress
附加到索引,因为行号就像注释中讨论的时间序列
df = df.set_index('sourceaddress', append=True)
交换Index
级别,然后对MultiLevel
索引进行排序,以有效显示事件的“时间顺序”(按每个IP地址分组)
df = df.swaplevel().sort_index()
现在df
如下所示,具有2级MultiIndex:
sourceusername sourcehostname destinationhostname
sourceaddress
10.11.2.22 0 1111 Computer_1 khms0.google.com
1 1111 Computer_1 photos.wavebid.com
7 1111 None dt.adsafeprotected.com
8 1111 Computer_1 ad.doubleclick.net
10 1114 Computer_1 khms2.google.com
11 - None photos.wavebid.com
10.11.2.23 2 1112 Computer_2 www.msn.com
5 - None pixabay.com
9 - None s0.2mdn.net
10.11.2.24 3 1113 Computer_3 log.pinterest.com
4 1113 Computer_3 apx.moatads.com
6 - Computer_3 rb.adnxs.com
12 1113 Computer_3 log.pinterest.com
用np.nan
替换'-'和'None'并使用nan值的前填充来有效填充您已按IP地址分组的伪时间序列
df = df.replace('-', np.nan).replace('None', np.nan).ffill()
将sourceaddress
中的Index
移到数据中,以得到我们开始使用的格式:
df = df.reset_index(level='sourceaddress').sort_index()
重新排列列
df = df.reindex(columns=['sourceusername', 'sourcehostname', 'sourceaddress', 'destinationhostname'])
结果如下:
sourceusername sourcehostname sourceaddress destinationhostname
0 1111 Computer_1 10.11.2.22 khms0.google.com
1 1111 Computer_1 10.11.2.22 photos.wavebid.com
2 1112 Computer_2 10.11.2.23 www.msn.com
3 1113 Computer_3 10.11.2.24 log.pinterest.com
4 1113 Computer_3 10.11.2.24 apx.moatads.com
5 1112 Computer_2 10.11.2.23 pixabay.com
6 1113 Computer_3 10.11.2.24 rb.adnxs.com
7 1111 Computer_1 10.11.2.22 dt.adsafeprotected.com
8 1111 Computer_1 10.11.2.22 ad.doubleclick.net
9 1112 Computer_2 10.11.2.23 s0.2mdn.net
10 1114 Computer_1 10.11.2.22 khms2.google.com
11 1114 Computer_1 10.11.2.22 photos.wavebid.com
12 1113 Computer_3 10.11.2.24 log.pinterest.com