首页 > 解决方案 > 在未过滤表中查找最旧(最小)日期以获取过滤表中的键值

问题描述

我有两个表,第一个是第二个表的过滤表。键列是每个客户的唯一标识符

df_table1

key name product timestamp
1   AB   TR01    01.01.20
2   AC   ZT83    01.01.20
3   AD   RE76    01.01.20

df_table2

key name product timestamp
1   AB   TR01    01.01.20
2   AC   ZT83    01.01.20
3   AD   RE76    01.01.20
5   AE   GT51    12.07.20
6   AE   GT51    12.07.20
...
1   AB   AG01    01.04.05
2   AC   MN43    03.01.03
3   AD   RZ65    03.09.01

同样,表 1 是根据定义的某些标准过滤后的表 2 版本。

我的目标是找到表 1 中所有键的最早(最小)日期,并希望得到以下输出:

df_table1

key name product timestamp min_date
1   AB   TR01    01.01.20  01.04.05
2   AC   ZT83    01.01.20  03.01.03
3   AD   RE76    01.01.20  03.09.01

有没有一种方法可以在不为 table1 中的每个键循环 table2 的情况下做到这一点?

标签: pythonpython-3.xpandasnumpy

解决方案


先使用to_datetime,然后通过or聚合min并添加到第一个:DataFrameSeries.mapDataFrame.join

df_table1['timestamp'] = pd.to_datetime(df_table1['timestamp'], format='%d.%m.%y')
df_table2['timestamp'] = pd.to_datetime(df_table2['timestamp'], format='%d.%m.%y')

df_table1['min_date'] = df_table1['key'].map(df_table2.groupby('key')['timestamp'].min())

print (df_table1)
   key name product  timestamp   min_date
0    1   AB    TR01 2020-01-01 2005-04-01
1    2   AC    ZT83 2020-01-01 2003-01-03
2    3   AD    RE76 2020-01-01 2001-09-03

s = df_table2.groupby('key')['timestamp'].min().rename('min_date')
df_table1 = df_table1.join(s, on='name')

推荐阅读