python - 减少将 2 个数据帧合并到一起而丢失的数据量 pandas
问题描述
我问了这个问题:我问了这个问题,但是我没有考虑到另一个问题。Date2 必须在 Date1 之前。由于我认为预期的输出会使它更加明显。这是问题:我有 2 个数据框 Dataframe1:
id date1
1 11-04-2022
1 03-02-2011
2 03-05-2222
3 01-01-2001
4 02-02-2012
和数据框2:
id date2 data data2
1 11-02-2222 1 3
1 11-02-1999 3 4
1 11-03-2022 4 5
2 22-03-4444 5 6
2 22-02-2020 7 8
...
我想做的是从 dataframe2 中获取与 Dataframe1 中 date1 最接近的行,但它必须适合 id,但日期必须在 date1 之前 所需的输出如下所示:
id date1 date2 data data2
1 11-04-2022 11-03-2022 4 5
1 03-02-2011 11-02-1999 3 4
2 03-05-2222 22-02-2020 7 8
...
我将如何使用熊猫来做到这一点?
那么在不使用 df1 的情况下我该怎么做呢?
答案是这样的:
df1["date1"] = pd.to_datetime(df1["date1"])
df2["date2"] = pd.to_datetime(df2["date2"])
df1 = df1.sort_values(by="date1")
df2 = df2.sort_values(by="date2")
print(
pd.merge_asof(
df1,
df2,
by="id",
left_on="date1",
right_on="date2",
).dropna(subset=["date2"])
)
当我运行这个时,那里产生了 NaN 的分配(即使没有原因),导致我丢失了 60% 的数据。我将如何编辑该方法以减少产生和丢弃的 NaN 数量,以免丢失大量数据?
解决方案
您应该尝试使用 pandas merge_asof 中的参数“direction”。然后,我不知道在这种情况下它是否可以帮助您,但是您也可以使用 dropna() 中的 'thresh' 参数。
推荐阅读
- java - 尝试实现 JWT 安全性时出现 Hibernate 的 StackOverflowError
- javascript - Jest-Puppeteer > 试图获取页面上最后一个 h4 的 textContent
- php - 如何在laravel 7中显示从类别到产品类别的面包屑
- angular - 指令 QuillEditorBase 中的 Ngx-Quill 错误
- python - Python中的泊松统计是否有逆概率质量函数?
- c++ - 当我在 C++ 中调用 struce 的只读静态成员时线程安全吗
- php - 将数组内爆到 dayname
- c++ - Direct2D 用 WM_ERASEBKGND 擦除背景?
- python - 使用 Python 将数据从 Wikipedia 提取到 txt 文件
- java - 在 Heroku 上部署 Spring Boot 应用程序 - 构建成功,但随后:无法提供页面