gpt4 book ai didi

python - 根据部分匹配组合两个 pandas df

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:38 24 4
gpt4 key购买 nike

抱歉标题模糊,很难解释。

我有两个包含相关信息的 pandas df's。一个包含显示事件应该发生时间的时间戳的数据,另一个包含显示该事件实际发生时间的数据。

我想确定这些时间戳之间的差异。问题是代表每个事件的值略有不同。它们相似但不完全相同。因此很难合并连接相同的值。

第一个 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中。例如家,商店,外出

此 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 中的数据属于同一次 session (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 合并。问题是有数百个代码,而且它们每天都在不断变化。

有没有办法对值进行部分匹配?比如,可以合并基本相同的值吗?

最佳答案

我相信可以使用 titlesplit如果第一个单词匹配:

Meet['E'] = Meet.B.str.title().str.split().str[0]
print (Meet)
A B C D E
0 10:00:05 HOME LOCK No: 10 Home
1 11:00:05 AWAY HR No: 1 Away
2 12:00:05 SHOPS JK No: 2 Shops
3 13:00:05 HOME LOCK No: 11 Home
4 14:00:05 SHOPS JK No: 3 Shops

另一个更通用的解决方案是使用 extract通过由 | 加入的可能的单词用于正则表达式或:

Meet['E'] = Meet.B.str.title().str.extract('(Home|Away|Shops)')
print (Meet)
A B C D E
0 10:00:05 HOME LOCK No: 10 Home
1 11:00:05 AWAY HR No: 1 Away
2 12:00:05 SHOPS JK No: 2 Shops
3 13:00:05 HOME LOCK No: 11 Home
4 14:00:05 SHOPS JK No: 3 Shops

如果通过 SchedE 列的唯一值创建模式,并使用 \b 作为单词边界,那么应该更动态:

pat = '|'.join(r"\b{}\b".format(x) for x in Sched.E.unique())
print (pat)
\bHome\b|\bShops\b|\bAway\b

Meet['E'] = Meet.B.str.title().str.extract('(' + pat + ')')
print (Meet)
A B C D E
0 10:00:05 HOME LOCK No: 10 Home
1 11:00:05 AWAY HR No: 1 Away
2 12:00:05 SHOPS JK No: 2 Shops
3 13:00:05 HOME LOCK No: 11 Home
4 14:00:05 SHOPS JK No: 3 Shops

关于python - 根据部分匹配组合两个 pandas df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com