Python 通过将另一列与字典匹配来更改dataframe的列
我有一个情况:Python 通过将另一列与字典匹配来更改dataframe的列,python,pandas,dataframe,anaconda,data-science,Python,Pandas,Dataframe,Anaconda,Data Science,我有一个情况: postStr = """{ "zoneId":"0", "id":["a","b","c","d","f","g"], "currencycode":["USD"], }""" postData = json.loads(postStr, object_pairs_hook=OrderedDict) 我有一个数据帧
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)
现在我想要一个数据frme,如果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)
请帮助我认为需要:
如果需要更动态的解决方案-用于DataFrame和dictionary中的列名称,并在循环中设置值:
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
我这样做了,但得到了:TypeError:string索引必须是整数self.resp_df.loc[self.resp_df['id'].isin(post_req['id']),'returnType']='CTR'@ayushgupta-如何工作转换到类似于
self.resp_df.loc[self.resp_df['id']).isin(list(post_req['id']),'returnType'='CTR
?self.resp_df.loc[id'],'returnType']='CTR'类型错误:字符串索引必须为integers@ayushgupta-什么是打印(类型(postData['id'])?
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