Python 在这种情况下,如何使用一个表中的值作为索引从另一个表中提取数据?
我觉得这应该很简单,但我很难接受。假设我有这个:Python 在这种情况下,如何使用一个表中的值作为索引从另一个表中提取数据?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我觉得这应该很简单,但我很难接受。假设我有这个: df1: ticker hhmm <--- The hhmm value corresponds to the column in df2 ====== ==== AAPL 0931 IBM 0930 XRX 1559 df2: ticker 0930 0931 0932 ... 1559 <<---- 390 columns ====== ==== ==== ==== ... =
df1:
ticker hhmm <--- The hhmm value corresponds to the column in df2
====== ====
AAPL 0931
IBM 0930
XRX 1559
df2:
ticker 0930 0931 0932 ... 1559 <<---- 390 columns
====== ==== ==== ==== ... ====
AAPL 4.56 4.57 ... ...
IBM 7.98 ... ... ...
XRX 3.33 ... ... 3.78
这两个df都有“ticker”作为索引,所以我可以简单地将它们连接起来,但假设这会占用太多内存(我使用的数据帧比这里显示的示例要大得多)
我已经试过申请了,现在很慢(15分钟后运行)
熊猫是怎么做的?谢谢 这里有一个关于您正在尝试做什么的最小示例。希望这能给你足够的提示:
# sample data
df1 = pd.DataFrame({'ticker':['AAPL','IBM','XRX'], 'hhmm':['0931','0930','1559']})
df2 = pd.DataFrame({'ticker':['AAPL','IBM','XRX'],
'0931': [2,2,3],
'0930': [5,6,7],
'1559': [8,7,6]})
# melt to match the format to join
df2 = pd.melt(df2, id_vars='ticker',var_name='hhmm',value_name='df2val')
# join to df1
df1.merge(df2, on=['ticker','hhmm'])
hhmm ticker df2val
0 0931 AAPL 2
1 0930 IBM 6
2 1559 XRX 6
有一个名为
lookup
df1['val']=df2.set_index('ticker').lookup(df1.ticker,df1.hhmm)
df1
Out[290]:
ticker hhmm val
0 AAPL 0931 4.57
1 IBM 0930 7.98
2 XRX 1559 33.00# I make up this number
试一试
我真的很喜欢这个解决方案,但每次遇到不存在的键时它都会抛出一个错误,有没有办法避免这种情况?@Vaishali如果我知道该键,我将在应用查找函数之前重新索引:-)这很有意义,df2.set_index('ticker').reindex(df1.ticker).lookup(df1.ticker,df1.hhmm)这个技巧和它比我的解决方案或合并要快得多吗
df1['val']=df2.set_index('ticker').lookup(df1.ticker,df1.hhmm)
df1
Out[290]:
ticker hhmm val
0 AAPL 0931 4.57
1 IBM 0930 7.98
2 XRX 1559 33.00# I make up this number
df2.set_index('ticker').stack().loc[df1.apply(tuple, axis = 1)]
ticker
AAPL 931 4.57
IBM 930 7.98
XRX 1559 3.78