从将我的系列索引和dataframe列映射到python键的系列或字典向dataframe添加一个新列

2024-04-28 07:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了这个问题,请帮助:

我有一个dataframe和一个系列,如下所示:

import pandas as pd

df1 = pd.DataFrame({"ID": [4,8,35,28,34,34,14,28], 
                    "cause of failure": [5,3,0,1,7,8,6,7], 
                    "crash": [0,0,0,1,1,1,1,1]}) 

我有一个系列:

s = pd.DataFrame({'':["None","Design flaw","metal fatigue","Manufacturing flaw","Pilot 
                 error","Mechanical failure","Improper maintenance","Fire","Corrosion"]})

#为了添加新列,我编写了add#u column函数,在函数中我将s1转换为#一个字典,但是

def add_column(df,s, ref_column, new_column):
    dict_s = s.to_dict(orient='dict')
    #dict_s = s.loc[0:].to_dict(orient='index')
    error', 5: 'Mechanical failure', 6: 'Improper maintenance', 7: 'Fire', 8: 'Corrosion'}
    df[new_column] = df[ref_column].map(dict_s)
    return df

add_column(df1,s1,"failure code","failure")

#我不希望将空标题放入字典,只希望序列的键值对

{'': {0: 'None', 1: 'Design flaw', 2: 'metal fatigue', 3: 'Manufacturing flaw', 4: 'Pilot error', 5: 'Mechanical failure', 6: 'Improper maintenance', 7: 'Fire', 8: 'Corrosion'}}

#Like this:
{0: 'None', 1: 'Design flaw', 2: 'metal fatigue', 3: 'Manufacturing flaw', 4: 'Pilot error', 5: 'Mechanical failure', 6: 'Improper maintenance', 7: 'Fire', 8: 'Corrosion'}

我弄不好这本词典

#然后我想映射此字典以匹配列“failure code”中的代码,并将其添加为新列“failure” 最后,我想向df1数据帧添加一个新的列失败

结果应如下所示:

    ID  failure code    crash   failure
1   8   3   0   Manufacturing flaw
2   35  0   0   None
3   28  1   1   Design flaw
4   34  7   1   Fire
5   34  8   1   Corrosion
6   14  6   1   Improper maintenance
7   28  7   1   Fire

Link to df


1条回答
网友
1楼 · 发布于 2024-04-28 07:16:20

您的s不是一个系列,而是一个数据帧。在map中使用序列:

df1['new_column'] = df1['cause of failure'].map(s[''])

输出:

   ID  cause of failure  crash            new_column
0   4                 5      0    Mechanical failure
1   8                 3      0    Manufacturing flaw
2  35                 0      0                  None
3  28                 1      1           Design flaw
4  34                 7      1                  Fire
5  34                 8      1             Corrosion
6  14                 6      1  Improper maintenance
7  28                 7      1                  Fire

或者直接构建一个系列:

s = pd.Series(["None","Design flaw","metal fatigue","Manufacturing flaw","Pilot error","Mechanical failure","Improper maintenance","Fire","Corrosion"])

df1['new_column'] = df1['cause of failure'].map(s)

相关问题 更多 >