通过比较同一数据框中的两列来更新列

时间:2019-11-11 21:36:43

标签: python pandas dataframe

我们有一个像下面的pandas数据框

Id Name PId Pname
------------------
01 Kiyl  -    -

02 Chery 04 Eden  

03 Daril -   -

04 Eden  01 Kiyil
在数据框中为

Id,Name,PID提供了列。我们需要输入PName列,该列是通过将Pid与Id进行比较而获得的,并为其填写名称作为PName。如果PID为空,则将其保留。

谁能建议使用熊猫的有效方法

def fn_getparamname(row,df):
  #  i=i+1
  #  print(i)
    if(row['pid']==None):
        return ''
    indices=df.index[df['id']==row['pid']]
    if(len(indices)>0):
        print(indices)
    print(df.iloc[indices[0]]['name'])
    return df.iloc[indices[0]]['name']
return ''

1 个答案:

答案 0 :(得分:0)

IIUC,

首先,我们以Id作为键,并将Name作为值,为您的IdName列创建字典。

id_name_dict = dict(zip(df['Id'],df['Name']))
print(id_name_dict)
{1: 'Kiyl', 2: 'Chery', 3: 'Daril', 4: 'Eden'}

然后,我们利用Python map功能来根据PId列映射值

df['PId'].map(id_name_dict)
0     NaN
1    Eden
2     NaN
3    Kiyl
Name: PId, dtype: object

然后您可以将其分配给一列,并用所需的任何值填充空白值。

df['Pname'] = df['PId'].map(id_name_dict).fillna('-')
print(df)
           Id   Name PId Pname
    0   1   Kiyl   -     -
    1   2  Chery   4  Eden
    2   3  Daril   -     -
    3   4   Eden   1  Kiyl