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

将字典值加载到 Pandas 中数据帧的行值中

将字典值加载到 Pandas 中数据帧的行值中

慕工程0101907 2021-10-26 15:45:09
我有一个 python 字典{1:cat,  2:dog,  3:sheep,  4:foo,  5:bar,  6:fish,  7:lion,  8:shark,  9:zebra,  10:snake}我还有熊猫数据框如下 df:ID    col1    col2    col2   col418938   1       Nan     5      Nan17839  Nan      2      Nan     872902   3       5       9      Nan78298   7       Nan    Nan     6现在我正在尝试将每列中每个单元格的值替换或映射到字典值,并尝试将concat所有列值都映射到一个新列。新的df应该是这样的:ID    col1    col2    col2   col4     new_col18938  cat      Nan    bar     Nan     cat|bar17839  Nan      dog    Nan    shark    dog|shark72902  sheep    bar   zebra    Nan    sheep|bar|zebra78298  lion     Nan    Nan    fish     lion|fish我正在尝试实现第二步,即concat使用代码的所有列df['new_col'] = df.drop('ID',1).agg(lambda x: '|'.join(x.dropna().astype(str).values), axis=1)但我无法让第一步工作我用了df = df.columns.map(dict)但它没有给我我需要的预期答案。
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你可以试试这个:


df = df.set_index('ID')

d1 = pd.concat([df[i].replace('Nan',pd.np.nan).dropna().astype(int).map(d) for i in df.columns], axis=1)

d1['new_col'] = d1.apply(lambda x: '|'.join(x.dropna()), axis=1)

print(d1)

或者,如果您想要更慢但更简洁的代码:


d1 = df.apply(lambda x: x.replace('Nan',pd.np.nan).dropna().astype(int).map(d))

d1['new_col'] = d1.apply(lambda x: '|'.join(x.dropna()), axis=1)

d1

输出:


        col1 col2 col2.1   col4          new_col

ID                                              

17839    NaN  dog    NaN  shark        dog|shark

18938    cat  NaN    bar    NaN          cat|bar

72902  sheep  bar  zebra    NaN  sheep|bar|zebra

78298   lion  NaN    NaN   fish        lion|fish


查看完整回答
反对 回复 2021-10-26
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

使用df.replace():


df = df.replace(dict)

请注意,如果您的字典中的键是字符串,您可能需要regex=True:


df = df.replace(dict, regex=True)

例子:


import pandas as pd


d = {1:"cat",

  2:"dog",

  3:"sheep",

  4:"foo",

  5:"bar",

  6:"fish",

  7:"lion",

  8:"shark",

  9:"zebra",

  10:"snake"}


df = pd.DataFrame({'ID': [123, 456], 'col1': [1, 2], 'col2': [5, 6]})

df = df.replace(d)


print(df)

输出:


    ID col1  col2

0  123  cat   bar

1  456  dog  fish


查看完整回答
反对 回复 2021-10-26
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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