我是Python新手,我正在尝试用Python&Pandas生成Excel的IndexMatch函数的类似结果,尽管我正在努力让它工作。你知道吗
基本上,我有两个独立的数据帧:
第一个数据帧('market')有7列,不过我只需要其中的3列来进行这个练习('symbol'、'date'、'close')。这个df有13948340行。你知道吗
第二个数据帧('transactions')有14列,但只有我只需要其中的2列('I\u symbol','acceptance\u date')。这个df有1428026行。你知道吗
我的逻辑是:如果i\u symbol等于symbol并且acceptance\u date等于date:print symbol,date&close。这应该很容易。你知道吗
我已经用iterrows()实现了它,但是由于数据集的大小,它每3分钟返回一个结果—这意味着我必须运行脚本1190小时才能得到最终结果。你知道吗
根据我在网上读到的内容,itertuples应该是一种更快的方法,但我目前遇到了一个错误:
ValueError:要解包的值太多(需要2个)
这是我编写的代码(当前生成上述ValueError):
for i_symbol, acceptance_date in transactions.itertuples(index=False):
for symbol, date in market.itertuples(index=False):
if i_symbol == symbol and acceptance_date == date:
print(market.symbol + market.date + market.close)
2个问题:
谢谢,马特
@Parfait在下面提供了最佳答案作为评论。非常干净,速度非常快-谢谢。你知道吗
不需要循环。你知道吗
关于问题1:熊猫.itertuples()为每行生成一个^{} 。您可以像标准元组一样解压缩这些元素,也可以按名称访问元组元素:
(我没有用你这种大小的数据帧测试这个,但我很确定它仍然非常慢)
关于问题2:您可以简单地^{} 符号和日期上的数据帧。你知道吗
重命名“transactions”数据框,使其也包含名为“symbol”和“date”的列:
然后合并符号和日期上的两个数据帧:
结果数据帧由两个数据帧中存在的每个符号/日期组合的一行组成。操作只需要几秒钟在我的机器上与你的大小的数据帧。你知道吗
相关问题 更多 >
编程相关推荐