簡體   English   中英

如何用Pandas數據框中的列值替換單元格中的索引值

[英]How to replace indices values in a cell with the column value in a Pandas dataframe

我有一個具有唯一ID和少量屬性的數據集。 我在Python中執行了kd樹,以獲取三個最近鄰居的每個id的索引,如下圖所示: 在此處輸入圖片說明

上圖中的“索引”是熊貓數據框隨附的默認索引。 我希望輸出的格式如下圖所示: 在此處輸入圖片說明

這可以使用vlookup在excel中輕松完成,但是如何在Python中做到這一點?

使用replaceSerie

df = df.replace(df['id'])
#or convert to dict (first solution)
#df = df.replace(df['id'].to_dict())
print (df)
   id neighborl neighbor2 neighbor3
0  u1        u1        u4        u3
1  u2        u2        u3        u2
2  u3        u3        u1        u2
3  u4        u4        u1        u2

另一個解決方案:

cols = ['neighbor1', 'neighbor2', 'neighbor3']
df[cols] = df[cols].applymap(df['id'].to_dict().get)
print (df)
   id neighbor1 neighbor2 neighbor3
0  u1        u1        u4        u3
1  u2        u2        u3        u2
2  u3        u3        u1        u2
3  u4        u4        u1        u2

如果要更多動態解決方案:

#select columns starting by neighbor
cols = df.filter(regex='^neighbor').columns
print (cols)
Index(['neighbor1', 'neighbor2', 'neighbor3'], dtype='object')

df[cols] = df[cols].replace(df['id'])
print (df)
   id neighbor1 neighbor2 neighbor3
0  u1        u1        u4        u3
1  u2        u2        u3        u2
2  u3        u3        u1        u2
3  u4        u4        u1        u2

#create mask by columns names starting by neighbor
mask = df.columns.str.startswith('neighbor')
print (mask)
[False  True  True  True]

df.loc[:, mask] = df.loc[:, mask].replace(df['id'])
print (df)
   id neighbor1 neighbor2 neighbor3
0  u1        u1        u4        u3
1  u2        u2        u3        u2
2  u3        u3        u1        u2
3  u4        u4        u1        u2

采用

In [289]: cols = ['neighbor1', 'neighbor2', 'neighbor3']

In [290]: df[cols].replace(df.set_index('index')['id'].to_dict())
Out[290]:
  neighbor1 neighbor2 neighbor3
0        u1        u4        u3
1        u2        u3        u2
2        u3        u1        u2
3        u4        u1        u2

In [291]: df[cols] = df[cols].replace(df.set_index('index')['id'].to_dict())

In [292]: df
Out[292]:
   index  id neighbor1 neighbor2 neighbor3
0      0  u1        u1        u4        u3
1      1  u2        u2        u3        u2
2      2  u3        u3        u1        u2
3      3  u4        u4        u1        u2

嘗試這個,

print df.replace(df['id'].to_dict())

輸入:

       id  neighbor1  neighbor2  neighbor3
index                                     
0      u1          0          3          2
1      u2          1          2          1
2      u3          2          0          1
3      u4          3          0          1

輸出:

       id neighbor1 neighbor2 neighbor3
index                                  
0      u1        u1        u4        u3
1      u2        u2        u3        u2
2      u3        u3        u1        u2
3      u4        u4        u1        u2
df = pd.DataFrame([['u1', 0, 3, 2], ['u2', 1, 2, 1], ['u3', 2, 0, 1], ['u4', 3, 0, 1]], columns=['id', 'n1', 'n2', 'n3'])
print df
   id  n1  n2  n3
0  u1  0   3   2 
1  u2  1   2   1 
2  u3  2   0   1 
3  u4  3   0   1 

print df.assign(n1=df.n1.map(df.id),
                n2=df.n2.map(df.id),
                n3=df.n3.map(df.id))    

   id  n1  n2  n3
0  u1  u1  u4  u3
1  u2  u2  u3  u2
2  u3  u3  u1  u2
3  u4  u4  u1  u2    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM