在pandas中与Excel VLOOKUP相对应的功能是什么?

11

我有以下数据框:

               A           B            C
 Index
2001-06-30    100       2001-08-31     (=value of A at date B)
2001-07-31    200       2001-09-30      ...
2001-08-31    300       2001-10-31      ...
2001-09-30    400       2001-11-30      ...

B 包含了从列 A 向前移动一定时间的日期。我想生成的列 C 包含了在日期 B 上,列 A 中对应的值(最好是 Excel VLOOKUP 公式中的逻辑)。我不希望简单地使用 shift(-2),因为实际上,B 列和 Index 之间的移动并不总是相等的。

我尝试了 df.loc['B', 'A'],但这可能过于简单,并导致错误。

1个回答

18

我认为您需要按列A使用map

df['C'] = df.B.map(df.A)
print (df)
              A          B      C
Index                            
2001-06-30  100 2001-08-31  300.0
2001-07-31  200 2001-09-30  400.0
2001-08-31  300 2001-10-31    NaN
2001-09-30  400 2001-11-30    NaN

它与以下内容相同:

df['C'] = df.B.map(df.A.to_dict())
print (df)
              A          B      C
Index                            
2001-06-30  100 2001-08-31  300.0
2001-07-31  200 2001-09-30  400.0
2001-08-31  300 2001-10-31    NaN
2001-09-30  400 2001-11-30    NaN

如果要查找的列是索引,则此方法完美适用。如果该列不是索引,该怎么办?要查找的列(要查找的值)和要查看的列(要获取的值)都是单独的列。 - Meet
请使用 df.index 而不是 df.B - jezrael
抱歉@jezrael,我想我的问题表述不够清楚。我需要查找col2并从df1中获取col3的值,然后将其放入df2的col4中。这两个df都没有涉及到索引。那么该怎么做呢?例如,在上面的例子中,如果“dates”的“索引”是一列而不是索引,那么相同的代码是否仍然适用? - Meet
@Meet - 合并时的值是什么?一些列吗? - jezrael
@Meet - 或许可以帮助解决这个问题 - jezrael
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接