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

我有一个 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   col4

18938   1       Nan     5      Nan

17839  Nan      2      Nan     8

72902   3       5       9      Nan

78298   7       Nan    Nan     6

现在我正在尝试将每列中每个单元格的值替换或映射到字典值,并尝试将concat所有列值都映射到一个新列。


新的df应该是这样的:


ID    col1    col2    col2   col4     new_col

18938  cat      Nan    bar     Nan     cat|bar

17839  Nan      dog    Nan    shark    dog|shark

72902  sheep    bar   zebra    Nan    sheep|bar|zebra

78298  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)

但它没有给我我需要的预期答案。


慕工程0101907
浏览 191回答 2
2回答

慕虎7371278

你可以试试这个: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_colID                                              17839    NaN  dog    NaN  shark        dog|shark18938    cat  NaN    bar    NaN          cat|bar72902  sheep  bar  zebra    NaN  sheep|bar|zebra78298   lion  NaN    NaN   fish        lion|fish

慕码人2483693

使用df.replace():df = df.replace(dict)请注意,如果您的字典中的键是字符串,您可能需要regex=True:df = df.replace(dict, regex=True)例子:import pandas as pdd = {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  col20  123  cat   bar1  456  dog  fish
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python