猿问

通过将其他列与字典匹配来更改数据框的列

我有一个情况:


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)

请帮忙


九州编程
浏览 93回答 1
1回答

神不在的星期二

我认为需要isin有loc:df1.loc[df1['id'].isin(postData['id']), 'id'] = 'XX'print (df1)   id  B  S0  XX  c  f1  XX  d  g2  XX  e  h3  XX  d  j4  XX  d  e5  XX  c  j6   h  s  t7   i  e  r8   j  s  p9   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   S0  XX  c  XX1  XX  d   g2  XX  e  XX3  XX  d   j4  XX  d   e5  XX  c   j6   h  s   t7   i  e   r8   j  s   p9   k  q   p
随时随地看视频慕课网APP

相关分类

Python
我要回答