我是论坛的新手。如果问到这个问题,请耐心等待。我试图用pandas实现这种类型的查询,因为mySQL速度太慢了。
update a from table_a a, table_b b
set acct_cnt = count(b.trxn)
where a.acct_id = b.acct_id
and b.trxn_dt between a.date1 and a.date2
我做了一些研究,但我唯一的结论是用熊猫实现它是非常困难的。任何人都可以给我一个如何做的暗示吗?
谢谢!
答案 0 :(得分:0)
在pandas中,这种查询不是直截了当的,因为代码定义了进程的算法,而在SQL中,代码是一个数学语句'应该执行的操作,而没有明确提到命令的顺序。
您可以通过以下方式完成任务:
假设您有2个数据框a和b:
import pandas as pd
a = pd.DataFrame([[10,'A','2016-02-01','2016-02-05'],
[20,'B','2016-02-01','2016-02-05'],
[30,'C','2016-02-01','2016-02-05']],
columns=['acct_id','name','date1','date2'])
b = pd.DataFrame([[10,'2016-02-02'],
[20,'2016-02-02'],
[10,'2016-01-02'],
[10,'2016-02-03']],
columns=['acct_id','trxn_dt'])
第一步是加入并计算您需要的值。 加入只能在相等条件下完成,因此我们将在第二行中应用第二个条件(之间):
joined = a.merge(b,on='acct_id')
joined = joined[joined.trxn_dt.between(joined.date1,joined.date2)]
然后你进行计数(使用分组依据)并更新:
counts = joined.groupby('acct_id').size()
a['acct_cnt'] = a.acct_id.apply(lambda x: counts.get(x,0))
最终,它总计最多4行代码,但每个代码都是一个独立的命令。