循环df上的特定值

时间:2017-11-16 21:45:01

标签: python pandas

一方面我有一个巨大的df

df1

                A     B    C    ....
2005-11-01     5.3   22    6
2005-11-02     5.4   21    4 
2005-11-03     5.2   17    7
   ....

另一方面,我有一个较小的df具有以下结构;

df2

       date       
A    2005-11-02  
B    2005-11-01
C    2005-11-03

我期待的是在df2中添加一个名为price的附加列,它会从df2循环每个索引值和列值,并在df中查找相应的价格。

所需的输出将是这样的:

       date        price
A    2005-11-02     5.4
B    2005-11-01      22
C    2005-11-03      7

我试过了:

prices=[]

for index,column in df2:
    prices.append(df.loc[column['date'][i],index.iloc[i]])
    i+=1
return prices

但是会返回不需要的输出。

ValueError: too many values to unpack (expected 2)

有人能告诉我如何根据df

中的索引和列循环df2

2 个答案:

答案 0 :(得分:2)

使用lookup

df.lookup(df2.date,df2.index)
Out[1003]: array([  5.4,  22. ,   7. ])

分配后

df2['Value']=df.lookup(df2.date,df2.index)
df2
Out[1005]: 
         date  Value
A  2005-11-02    5.4
B  2005-11-01   22.0
C  2005-11-03    7.0

答案 1 :(得分:2)

lookup是正确的方法。作为参考,您处于正确的轨道上,但使用iteritemszip索引和值会更好:

df2['Values'] = [df.loc[j, i] for i, j in df2['date'].iteritems()]

df2

         date  Values
A  2005-11-02     5.4
B  2005-11-01    22.0
C  2005-11-03     7.0