python - 从匹配的 id 复制值并附加到新列
问题描述
joinable_id id title owner_id user_id country
0 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251311 US
1 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251314 US
2 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251315 US
我有一个如上所述结构的项目数据集。我需要在条件如下的目的地国家/地区创建一个新列:
检查项目的所有者 id ( joinable id ),转到该行并复制country,将其附加到当前行的目标列。
这可能与Python和Pandas有关吗?
解决方案
自联接是一种方法(也将在 SQL 中)。但是,您有重复的键,所以还有几个步骤
- 将同一行删除到同一行
.loc[lambda d: d["index"]!=d["index_"]]
- 取
first()
匹配的行
df = pd.read_csv(io.StringIO("""joinable_id id title owner_id user_id country
0 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251311 US
1 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251314 US
2 ffff8f7f-7233-4a79-a651-ec499d0ca888 ffff8f7f-7233-4a79-a651-ec499d0ca888 doctor 4251311 4251315 US"""), sep="\s+")
(df.reset_index().merge(df.loc[:,["id","country"]].reset_index(), left_on="joinable_id", right_on="id", suffixes=("","_"))
.drop(columns="id_")
.loc[lambda d: d["index"]!=d["index_"]]
.groupby("index", as_index=False).first()
.drop(columns="index_")
.rename(columns={"country_":"destination"})
)
推荐阅读
- sas - 手动和由 SAS 完成时的卡方检验结果差异
- reactjs - 模拟 textarea Jest 测试的更改
- opengl - 将递归渲染的场景显示到平面中
- sql - 数据类型等效项:MS Access 表 ↔ 'CREATE TABLE' 查询 ↔ ODBC SQL
- java - 使用 switch 语句设置对象变量
- vb.net - 作为图形对象的球和曲线之间的碰撞
- php - PHP包括在错误的地方搜索
- python - OSX swift no module named 6
- windows - 为 QMainWindow 禁用 QSizeGrip
- html - 如何在不重新加载的情况下更改 HTML5 视频的 src?