python - 通过将其他列与字典匹配来更改数据框的列
问题描述
我有一个情况:
postStr = """{
"zoneId":"0",
"id":["a","b","c","d","f","g"],
"currencycode":["USD"],
}"""
postData = json.loads(postStr, object_pairs_hook=OrderedDict)
我有一个数据框:
df = {
'id':['a','b','c','d','f','g','h','i','j','k'],
'B':['c','d','e','d','d','c','s','e','s','q'],
'S':['f','g','h','j','e','j','t','r','p','p']
}
df1 = pd.DataFrame(df)
现在我想要一个数据框架,如果 id 在字典中,则 B 对应列变为 XX
输出:
df = {
'id':['a','b','c','d','f','g','h','i','j','k'],
'B' :['XX','XX','XX','XX','XX','c','s','e','s','q'],
'S' :['f','g','h','j','e','j','t','r','p','p']
}
df1 = pd.DataFrame(df)
请帮忙
解决方案
df1.loc[df1['id'].isin(postData['id']), 'id'] = 'XX'
print (df1)
id B S
0 XX c f
1 XX d g
2 XX e h
3 XX d j
4 XX d e
5 XX c j
6 h s t
7 i e r
8 j s p
9 k q p
如果想要更多动态解决方案 -intersection
用于 DataFrame 和字典中的列名并在循环中设置值:
postStr = """{
"S":["f","h"],
"id":["a","b","c","d","f","g"],
"currencycode":["USD"]
}"""
postData = json.loads(postStr, object_pairs_hook=OrderedDict)
print (postData)
OrderedDict([('S', ['f', 'h']),
('id', ['a', 'b', 'c', 'd', 'f', 'g']),
('currencycode', ['USD'])])
df = {
'id':['a','b','c','d','f','g','h','i','j','k'],
'B':['c','d','e','d','d','c','s','e','s','q'],
'S':['f','g','h','j','e','j','t','r','p','p']
}
df1 = pd.DataFrame(df)
for col in df1.columns.intersection(postData.keys()):
df1.loc[df1[col].isin(postData[col]), col] = 'XX'
print (df1)
id B S
0 XX c XX
1 XX d g
2 XX e XX
3 XX d j
4 XX d e
5 XX c j
6 h s t
7 i e r
8 j s p
9 k q p
推荐阅读
- css - 带有图像的 flex 子项的大小不正确
- vue.js - 如何在测试 vue 组件时为 jest 快照添加样式?
- python - 仅使用 python 读取 csv 文件中的某些行
- c# - 使用 C# 在远程服务器本身上执行批处理文件
- python - 为什么我的 python 脚本没有从命令行运行?
- mysql - 如何解决 GROUP BY 列空优先级?
- javascript - 为什么忽略 AJAX 调用?
- drupal - 使用配置导出创建 Drupal 8 配置文件安装程序
- mod-rewrite - 根据域将example.txt重写为另一个
- c# - 在分配“真实”值之前用空值/空值初始化变量是否有益?