我想将两个数据帧合并在一起但是根据某些逻辑添加一列。我的数据框的简化示例如下:
DF_1:
domain ttl nameserver file_date
fakedomain.com 86400 ns1.fakedomain.com 8/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 8/8/2008
DF_2:
domain ttl nameserver file_date
fakedomain.com 86400 ns1.fakedomain.com 9/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 9/8/2008
我想要做的是将这两个数据帧合并为一个如下所示的数据框:
DF_2:
domain ttl nameserver first seen last seen
fakedomain.com 86400 ns1.fakedomain.com 8/8/2008 9/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 8/8/2008 9/8/2008
我找不到合并它们并保留日期的方法。我还想确保日期在正确的字段中。重要的是要注意我正在从文件名中提取正则表达式创建日期。我也会随着时间的推移不断地运行这个脚本,所以第一次看到的日期只会在其他内容发生变化时发生变化域名更改其名称服务器。
我能想到的唯一方法是将它们与重命名的日期列合并,然后遍历整个数据帧,对日期进行适当的排序,但这似乎效率低下。
答案 0 :(得分:0)
我不确定哪个进程生成这些帧或者它是否是连续的新数据流,但只是评论问题的实质,你可以这样做:
import pandas as pd
from StringIO import StringIO
s1="""
domain ttl nameserver file_date
fakedomain.com 86400 ns1.fakedomain.com 8/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 8/8/2008
"""
s2="""
domain ttl nameserver file_date
fakedomain.com 86400 ns1.fakedomain.com 9/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 9/8/2008
"""
然后,
df1 = pd.DataFrame.from_csv(StringIO(s1), sep='\s+',parse_dates=['file_date'] )
df2 = pd.DataFrame.from_csv(StringIO(s2), sep='\s+',parse_dates=['file_date'] )
假设您需要domain
,ttl
和nameserver
的唯一组合,以及该组合的第一次和最后一次观察,请连接帧并抓住最小和最大日期
result = pd.concat([df1,df2]).reset_index().groupby(['domain','ttl','nameserver']).file_date.agg({'first_seen':'min','last_seen':'max'})
最后:
result
first_seen last_seen
domain ttl nameserver
fakedomain.com 86400 ns1.fakedomain.com 8/8/2008 9/8/2008
fakedomainz.com 86400 ns1.fakedomainz.com 8/8/2008 9/8/2008