0
06
41
17
为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

九州编程 2021-06-02 17:08:35
我有一个情况: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)请帮忙

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我认为需要isin有loc:


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


查看完整回答
反对 回复 2021-06-22

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号