【发布时间】:2018-06-06 05:57:06
【问题描述】:
抱歉标题含糊不清,很难解释。
我有两个包含相关信息的pandas df's。一个包含显示事件应该发生时间的时间戳的数据,另一个显示事件实际发生时间的数据。
我想确定这些时间戳之间的差异。问题是代表这些事件的每个位置的值略有不同。它们相似但不相同。所以很难 merge 或 concatenate 在相同的值上。
第一个df 是事件应该发生的时间:
例子df:
Sched = pd.DataFrame({
'E' : ['Home','Shops','Away','Shops','Home'],
'F' : ['10:00:00','11:00:00','12:00:00','13:00:00','14:00:00'],
'G' : ['No: 10', 'No: 2', 'No: 1','No: 3','No: 11'],
})
所以事件发生的地方标记在Column E中。例如Home, Shops, Away.
此 df 显示事件实际发生的时间:
Meet = pd.DataFrame({
'A' : ['10:00:05','11:00:05','12:00:05','13:00:05','14:00:05'],
'B' : ['HOME LOCK','AWAY HR','SHOPS JK','HOME LOCK','SHOPS JK'],
'C' : ['No:','No:','No:','No:','No:'],
'D' : ['10', '1', '2','11','3'],
})
所以Column B 中的数据是在同一个会议(Home、Away、Shops)中,但有一些差异。都是大写字母,还有一些额外的字符串。
我考虑过尝试在使用中映射适当的代码:
Code = pd.DataFrame({
'H' : ['HOME LOCK','AWAY HR','SHOPS JK'],
'I' : ['Home','Away','Shops'],
})
Meet['B'] = Meet['B'].map(Code.set_index('H')['I'])
这样我可以将输出与sched df 合并。问题是那里有数百个代码,它们每天都在不断变化。
有没有办法对值进行部分匹配?如题,大体相同的值可以合并吗?
【问题讨论】:
-
您是否始终保证 Meet 的 B 列中的第一个单词是 Sched 的 E 列中的有效键?
-
@coldspeed 是的,第一个单词总是一样的。 Meet 总是有上限,而 Sched 不是
标签: python pandas merge concatenation