Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在这种情况下,如何使用一个表中的值作为索引从另一个表中提取数据?_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

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