python - 在未过滤表中查找最旧(最小)日期以获取过滤表中的键值
问题描述
我有两个表,第一个是第二个表的过滤表。键列是每个客户的唯一标识符。
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 的情况下做到这一点?
解决方案
先使用to_datetime
,然后通过or聚合min
并添加到第一个:DataFrame
Series.map
DataFrame.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')
推荐阅读
- firebase - 确保 Firestore 导出的数据完整性
- visual-studio-code - 如何在 VSCode 中使用 Lua API 声明文件
- java - 无法编译maven项目
- java - 清除子数组而不影响主数组
- css - 搜索栏仅向右过渡
- python - 如何使用 JWT 和 HttpOnly cookie 对用户进行身份验证
- javascript - 基于公共ID合并两个数组
- ios - IOS Sign In with apple using swift crash on iPad only on apple review
- android - 如何解决包含模块 Gradle 6.x?
- reactjs - redux 状态更新时如何更新本地状态(react-redux)