我如何合并两个表与日期内的关键(Python)



在我找到解决问题的方法之前,我一直在徘徊,我想问一下社区里的人,你们是否有比我想到的更好的主意。

我的问题如下:

我有两个表(一个表是我的源数据,另一个是映射),我想通过某个键合并。在源数据中,我有两个日期:Date_1Date_2在我的映射中,我有四个日期:Date_1_begin, Date_1_end, Date_2_begin, Date_2_end问题是:这些日期是我密钥的一部分。

例如:

df
A  B      date
0  1  A  20210310
1  1  A  20190101
2  3  C  19981231
mapping
A  B date_begin  date_end code
0  1  A   19600101  20201231    1
1  1  A   20210101  20991231    2
2  3  C   19600101  20991231    3

这个想法是:做这样的事情:pd.merge(df, mapping, on = ['A','B'])

将为密钥1_A提供两个代码:12。但是我想要一个1-1的关系。

为了分配考虑日期的正确代码,我使用piecewise做了这样的事情fromnumpylibrary:

df_date= df['date'].values
conds = [(df_date >= start_date)&(df_date<= end_date)] for start_date, end_date in zip(mapping.date_begin.values, mapping.date_end.values)]
result = np.piecewise(np.zeros(len(df)), conds, mapping['code'].values)
df['code']  = result

它工作得很好…但我想它一定存在于某个更容易、更优雅的地方……

提前感谢!Clem

您需要为重复行添加枚举:

(df1.assign(enum=df1.groupby(['A','B'].cumcount())
.merge(df2.assign(enum=df2.groupby(['A','B']).cumcount()),
on=['A','B','enum'])
)

相关内容

  • 没有找到相关文章

最新更新