我们有一个像下面的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 ''
答案 0 :(得分:0)
IIUC,
首先,我们以Id
作为键,并将Name
作为值,为您的Id
和Name
列创建字典。
id_name_dict = dict(zip(df['Id'],df['Name']))
print(id_name_dict)
{1: 'Kiyl', 2: 'Chery', 3: 'Daril', 4: 'Eden'}
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