我有以下DF
SampleID ParentID
0 S10 S20
1 S10 S30
2 S20 S40
3 S30
4 S40
如何将另一行的ID放在' ParentID'列中?而不是字符串?
预期结果:
SampleID ParentID
0 S10 2
1 S10 3
2 S20 4
3 S30
4 S40
我发现的最接近这个问题的结果是: How to self-reference column in pandas Data Frame?
答案 0 :(得分:2)
我认为您可以使用merge
,然后指定列index
:
df1 = pd.merge(df[['SampleID']].reset_index(),
df[['ParentID']],
left_on='SampleID',
right_on='ParentID')
print (df1)
index SampleID ParentID
0 2 S20 S20
1 3 S30 S30
2 4 S40 S40
df['ParentID'] = df1['index']
df.fillna('', inplace=True)
print (df)
SampleID ParentID
0 S10 2
1 S10 3
2 S20 4
3 S30
4 S40
map
和dict
的另一个解决方案,其中交换键的值为:
d = dict((v,k) for k,v in df.SampleID.iteritems())
print (d)
{'S10': 1, 'S40': 4, 'S20': 2, 'S30': 3}
df.ParentID = df.ParentID.map(d)
df.ParentID.fillna('', inplace=True)
print (df)
SampleID ParentID
0 S10 2
1 S10 3
2 S20 4
3 S30
4 S40
答案 1 :(得分:1)
通过传递要替换的值的映射列表来使用replace
:
df.ParentID.replace(df.SampleID.tolist(), df.index.tolist(), inplace=True)
df
Out[22]:
SampleID ParentID
0 S10 2.0
1 S10 3.0
2 S20 4.0
3 S30 NaN
4 S40 NaN