我需要在标识符和条件上合并两个pandas数据帧,其中一个数据帧中的日期在另一个数据帧中的两个日期之间.
Dataframe A有一个日期("fdate")和一个ID("cusip"):

我需要将此与此数据帧B合并:

在A.cusip==B.ncusip和A.fdate之间B.namedt和B.nameenddt.
在SQL中这将是微不足道的,但我能看到如何在pandas中执行此操作的唯一方法是首先在标识符上无条件合并,然后在日期条件上进行过滤:
df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip')
df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]
Run Code Online (Sandbox Code Playgroud)
这真的是最好的方法吗?似乎如果可以在合并中进行过滤以避免在合并之后但在过滤器完成之前具有可能非常大的数据帧,则会好得多.
我对Python和Pandas很陌生,所以这可能是一个显而易见的问题.
我有一个列有年龄的数据框.我想创建一个带有年龄段的新领域.我可以使用lambda语句捕获单个if/else语句,但我想使用多个if,例如if age < 18 then 'under 18' elif age < 40 then 'under 40' else '>40'.
我不认为我可以使用lambda做到这一点,但我不知道如何以不同的方式做到这一点.到目前为止我有这个代码:
import pandas as pd
import numpy as n
d = {'Age' : pd.Series([36., 42., 6., 66., 38.]) }
df = pd.DataFrame(d)
df['Age_Group'] = df['Age'].map(lambda x: '<18' if x < 19 else '>18')
print(df)
Run Code Online (Sandbox Code Playgroud)