我有两个数据帧,两个数据帧都包含一个不规则间隔的毫秒分辨率时间戳列.我的目标是匹配行,以便对于每个匹配的行,1)第一个时间戳总是小于或等于第二个时间戳,2)匹配的时间戳对于满足1)的所有时间戳对最接近.
有没有办法用pandas.merge做到这一点?
我试图在名称和最近的日期合并两个数据帧(WRT左手数据帧).在我的研究中,我在这里找到了一个类似的问题,但它也没有考虑到这个名字.从上面的问题看来似乎没有办法用merge做这个,但我看不到另一种方法来做两个不使用pandas merge函数的参数连接.
有合并的方法吗?如果不是这样做的合适方式是什么?
我会发布一份我尝试过的内容,但这是在日期上进行精确合并而无法正常进行的.最重要的一行是我制作data3数据帧的最后一行.
data=pd.read_csv("edgar14Afacts.csv", parse_dates={"dater": [2]}, infer_datetime_format=True)
data2=pd.read_csv("sdcmergersdata.csv", parse_dates={"dater": [17]}, infer_datetime_format=True)
list(data2.columns.values)
data2.rename(columns=lambda x: x.replace('\r\n', ''), inplace=True)
data2.rename(columns=lambda x: x.replace('\n', ''), inplace=True)
data2.rename(columns=lambda x: x.replace('\r', ''), inplace=True)
data2=data2.rename(columns = {'Acquiror Name':'name'})
data2=data2.rename(columns = {'dater':'date'})
data=data.rename(columns = {'dater':'date'})
list(data2.columns.values)
data["name"]=data['name'].map(str.lower)
data2["name"]=data2['name'].map(str.lower)
data2['date'].fillna(method='pad')
data['namer1']=data['name']
data['dater1']=data['date']
data2['namer2']=data2['name']
data2['dater2']=data2['date']
print data.head()
print data2.head()
data['name'] = data['name'].map(lambda x: str(x)[:4])
data2['name'] = data2['name'].map(lambda x: str(x)[:4])
data3 = pd.merge(data, data2, how='left', on=['date','name'])
data3.to_csv("check.csv")
Run Code Online (Sandbox Code Playgroud) 我有两个 Pandas 数据框,我想在多列(比如 3)和大约(即最近的邻居)上的一个(日期)列上加入/合并。我也想返回它们之间的差异(天)。每个数据集大约有 50,000 行长。我对内连接最感兴趣,但“剩菜”也很有趣,如果不是太难掌握的话。大多数“完全匹配”观察结果将在每个数据框中多次出现。
我一直在尝试使用difflib.get_close_matches将它们全部连接为字符串(这很愚蠢,我知道!)但并不总是给出完全匹配。我想我需要先循环精确匹配,然后在该组中找到最近的匹配,但我似乎无法正确...
数据框看起来像:
df1 = pd.DataFrame({'index': ['a1','a2','a3','a4'], 'col1': ['1232','432','432','123'], 'col2': ['asd','dsa12','dsa12','asd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-20','2010-06-20','2008-10-21'],}).set_index('index')
df1
Out[430]:
col1 col2 col3 date
index
a1 1232 asd 1 2010-01-23
a2 432 dsa12 2 2016-05-20
a3 432 dsa12 2 2010-06-20
a4 123 asd2 3 2008-10-21
df2 = pd.DataFrame({'index': ['b1','b2','b3','b4'], 'col1': ['132','432','432','123'], 'col2': ['asd','dsa12','dsa12','sd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-23','2010-06-10','2008-10-21'],}).set_index('index')
df2
Out[434]:
col1 col2 col3 date
index
b1 132 asd 1 2010-01-23
b2 432 dsa12 2 2016-05-23
b3 432 …Run Code Online (Sandbox Code Playgroud)