python - 如何在python中的一个单元格中合并多个值
问题描述
我有两个数据框。我必须查看数据框 2 并在数据框 1 中输入相应的值或创建一个新的数据框。我怎样才能在python中做到这一点?
输入:
数据框 1:
值:10、[20,30]、5
数据框 2:
值:10、20、30、5
字母:a、b、a、c
输出应该是这样的
数据框 3:
值:10、[20,30]、5
字母:a、[b、a]、c
解决方案
因此,您有一个可以包含简单值或列表的 DataFrame 列,以及要用作翻译表的第二个 DataFrame。
我将假设中的列Value
仅df2
包含唯一值。
一种简单的方法是df1.Value
在每个单元格中分解为一个值,然后重置索引以将原始索引存储在数据框列中,以便以后能够对其进行聚合。然后你只需合并df2
并聚合保存的原始索引:
df1.reset_index().explode('Value').merge(df2, how='left', on='Value'
).groupby('index').agg(
lambda x: x.iat[0] if len(x) == 1 else x.to_list())
它按预期给出:
Value Letter
index
0 10 a
1 [20, 30] [b, a]
2 5 c
推荐阅读
- sql - 找不到解决三张表和连接操作相关问题的方法
- java - curl --cert 使用了错误的证书
- javascript - setTimout() ajax 请求不成功
- cin - 为什么在我写入并关闭该文件后我不能从该文件中读取?
- bazel - Bazel 是否支持枚举传递依赖项和依赖项存储库位置?
- elasticsearch - 如何过滤来自请求正文而不是请求 url 的 elasticsearch 响应?
- c# - 如何使用 c# Litedb (noSQL) 更改数据库位置?
- android - 在 Auth0 Android SDK 上使用通用登录时阻止注册并只允许登录?
- ruby-on-rails - ActiveRecord 中不区分大小写的匹配,LOWER() 未找到任何匹配项
- sql - Oracle - SELECT CASE WHEN 语法