【发布时间】:2021-07-02 14:03:57
【问题描述】:
我正在尝试根据一个数据帧的值在另一个数据帧的值范围内合并两个数据帧。我的数据是这样的
headingdf = pd.DataFrame({'heading':['A', 'B', 'B', 'C', 'D'],
'anomaly_start':[4, 17, 40, 61, 64],
'anomaly_end':[5, 19, 41, 65, 67]})
heading anomaly_start anomaly_end
0 A 4 5
1 B 17 19
2 B 40 41
3 C 61 65
stockdf = pd.DataFrame({'ticker':['AAPL', 'AAPL', 'AMZN', 'AMZN'],
'anomaly_start':[4,18,18, 69]})
ticker anomaly_start
0 AAPL 4
1 AAPL 18
2 AMZN 18
3 AMZN 69
我想返回一个数据框,该数据框根据关闭的异常的开始和结束时间合并数据框。 If stockdf['anomaly_start'] in range(headingdf['anomaly_start], heading['anomaly_end']+5) 所以它会返回这样的东西
heading ticker anomaly_ticker_start anomaly_heading_start \
0 A AAPL 4 4
1 B AAPL 18 17
2 B AMZN 18 17
3 C AMZN 69 61
4 D AMZN 69 64
anomaly_heading_end
0 5
1 19
2 19
3 65
4 67
到目前为止,下面的代码返回了我需要的东西,但它不能很好地扩展,并且在我的 25000 个航向观察和 16000 个股票观察的数据集上运行得非常慢
matched_anomalys = pd.DataFrame(columns = ['heading',
'ticker',
'anomaly_ticker_start',
'anomaly_heading_start',
'anomaly_heading_end'])
for _, hrow in headingdf.iterrows():
for _, srow in stockdf.iterrows():
if int(srow['anomaly_start']) in range(int(hrow['anomaly_start']),int(hrow['anomaly_end'])+5):
matched_anomalys = matched_anomalys.append({'heading':hrow['heading'],
'ticker':srow['ticker'],
'anomaly_ticker_start':srow['anomaly_start'],
'anomaly_heading_start':hrow['anomaly_start'],
'anomaly_heading_end':hrow['anomaly_end']}, ignore_index=True)
我可以做些什么来优化它/使它更有效地运行?我找不到任何基于条件合并熊猫数据框的示例
【问题讨论】:
标签: python pandas performance optimization