python - 用 pandas 的其他行中的值填充一列
问题描述
有人可以帮我理解吗?
让我们拥有这个 DataFrame:
df = pd.DataFrame({
"id": ['a', 'b', 'c', 'd', 'e'],
"parent_id": [None, None, 'a', 'b', 'a'],
"name": ["Bob", "Jane", "John", "Patty", "Sam"],
})
现在,我想检索每个子名称旁边的父名称,如下所示:
+----+-----------+-------+-------------+
| id | parent_id | name | parent_name |
+----+-----------+-------+-------------+
| a | None | Bob | NaN |
+----+-----------+-------+-------------+
| b | None | Jane | NaN |
+----+-----------+-------+-------------+
| c | a | John | Bob |
+----+-----------+-------+-------------+
| d | b | Patty | Jane |
+----+-----------+-------+-------------+
| e | a | Sam | Bob |
+----+-----------+-------+-------------+
所以我这样做:
df['parent_name'] = None
df['parent_name'] = df['parent_id'].apply(lambda x: df['name'][df['id']==x])
但这是我得到的:
+----+-----------+-------+-------------+
| id | parent_id | name | parent_name |
+----+-----------+-------+-------------+
| a | None | Bob | NaN |
+----+-----------+-------+-------------+
| b | None | Jane | NaN |
+----+-----------+-------+-------------+
| c | a | John | Bob |
+----+-----------+-------+-------------+
| d | b | Patty | NaN |
+----+-----------+-------+-------------+
| e | a | Sam | Bob |
+----+-----------+-------+-------------+
因此,它似乎只处理name
列中的第一项。
用柏拉图的话引用苏格拉底的话:“WTF???”
解决方案
我们可以尝试将与基于 common的对应映射parent_id
parent_name
id
df['parent_name'] = df['parent_id'].map(df.set_index('id')['name'])
id parent_id name parent_name
0 a None Bob NaN
1 b None Jane NaN
2 c a John Bob
3 d b Patty Jane
4 e a Sam Bob
推荐阅读
- internet-explorer - 如何避免 ADF 中的 URL 编码?
- sql - 根据第一个表从连接或添加表中的列创建表
- sql - 需要有关在 Big Query 中运行多个查询的帮助
- node.js - 当 CORS Access-Control-Allow-Origin 设置为 (*) 时设置 cookie
- linux - Grep 在目录中的所有文件中查找字符串,如果找到,将输出文件名附加到 txt?
- android - 安卓 9: android.os.FileUriExposedException:
- python-3.x - 在 pyspark 中,基于变量字段进行分组,并为特定值添加一个计数器(在变量更改时重置)
- django - Django:向高级 URL 发出 GET 请求
- google-apps-script - 如何使用聊天机器人访问用户的电子邮件?
- oracle - 根据条件内每个值的 max(count_date) 对 PIVOT 内的列进行排序