pandas - 如何根据列值修改数据框
问题描述
我想根据 rel_list 将关系添加到列“关系”。具体来说,对于每个元组,即('a','b'),我想将第一行中的关系列值''替换为'b',但不要重复,这意味着对于第二行,不要将 '' 替换为 'a',因为它们被认为是重复的。以下代码不完全正确:
import pandas as pd
data = {
"names": ['a', 'b', 'c', 'd'],
"ages": [50, 40, 45, 20],
"relations": ['', '', '', '']
}
rel_list = [('a', 'b'), ('a', 'c'), ('c', 'd')]
df = pd.DataFrame(data)
for rel_tuple in rel_list:
head = rel_tuple[0]
tail = rel_tuple[1]
df.loc[df.names == head, 'relations'] = tail
print(df)
df 的当前结果是:
names ages relations
0 a 50 c
1 b 40
2 c 45 d
3 d 20
但是,正确的是:
names ages relations
0 a 50 b
0 a 50 c
1 b 40
2 c 45 d
3 d 20
有需要添加的新行。在这种情况下,第二行,如上。怎么做?
解决方案
您可以制作数据框和merge
:
(df.drop('relations', axis=1)
.merge(pd.DataFrame(rel_list, columns=['names', 'relations']),
on='names',
how='outer'
)
# .fillna('') # uncomment to replace NaN with empty string
)
输出:
names ages relations
0 a 50 b
1 a 50 c
2 b 40 NaN
3 c 45 d
4 d 20 NaN
推荐阅读
- android - android中的输入参数清理以避免漏洞
- android - Android:Hugo DebugLog 没有输出
- ios - 快速删除json响应中的空值
- node.js - 从文件系统 node.js 中删除图像
- javascript - TensorFlow.JS:无法在 loadModel 上找到分片文件
- json - 我如何将一个参数发送到rest api,它可以为空或有一些值?
- c# - 使用 C# 将实体模型和用户输入中的特定数据绑定到 GridView
- java - java中的nextInt()方法
- javascript - 是否可以更改 HTML 5 所需功能的文本颜色?
- jquery - 分号,CRUD sql 关键字为 POST jQuery 提供 403 错误