簡體   English   中英

使用其中一列中的值索引pandas數據幀

[英]Index a pandas dataframe with a value in one of the columns

樣本數據:

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df['idx'] = ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'B', 'C', 'D']
print(df)

          A         B         C idx
0  1.764052  0.400157  0.978738   A
1  2.240893  1.867558 -0.977278   B
2  0.950088 -0.151357 -0.103219   C
3  0.410599  0.144044  1.454274   D
4  0.761038  0.121675  0.443863   A
5  0.333674  1.494079 -0.205158   B
6  0.313068 -0.854096 -2.552990   C
7  0.653619  0.864436 -0.742165   B
8  2.269755 -1.454366  0.045759   C
9 -0.187184  1.532779  1.469359   D

我有一個像上面這樣的熊貓數據框。

我需要創建一個新列'value',對於每一行,索引'idx'列中的值(如果存在),如果不存在則返回'NaN'。

我的預期輸出是:

          A         B         C idx     value
0  1.764052  0.400157  0.978738   A  1.764052
1  2.240893  1.867558 -0.977278   B  1.867558
2  0.950088 -0.151357 -0.103219   C -0.103219
3  0.410599  0.144044  1.454274   D  NaN
4  0.761038  0.121675  0.443863   A  0.761038
5  0.333674  1.494079 -0.205158   B  1.494079
6  0.313068 -0.854096 -2.552990   C -2.552990
7  0.653619  0.864436 -0.742165   B  0.864436
8  2.269755 -1.454366  0.045759   C  0.045759
9 -0.187184  1.532779  1.469359   D  NaN

使用isin過濾掉無效的列名,然后使用DataFrame.lookup ,以及......“查找”您的值。

idx = df.loc[df.idx.isin(df.columns), 'idx']
df.loc[idx.index, 'value'] = df.lookup(idx.index, idx)
df

          A         B         C idx     value
0  1.764052  0.400157  0.978738   A  1.764052
1  2.240893  1.867558 -0.977278   B  1.867558
2  0.950088 -0.151357 -0.103219   C -0.103219
3  0.410599  0.144044  1.454274   D       NaN
4  0.761038  0.121675  0.443863   A  0.761038
5  0.333674  1.494079 -0.205158   B  1.494079
6  0.313068 -0.854096 -2.552990   C -2.552990
7  0.653619  0.864436 -0.742165   B  0.864436
8  2.269755 -1.454366  0.045759   C  0.045759
9 -0.187184  1.532779  1.469359   D       NaN

做。做

df['value']=np.nan

df['value']=df.values[df.index,df.columns.get_indexer(df.idx)]
df
Out[1130]: 
          A         B         C idx     value
0  0.416356 -1.290687 -0.436484   A  0.416356
1  0.600539  1.107413 -0.100904   B   1.10741
2 -0.455892  0.913249  0.294055   C  0.294055
3 -0.545505 -1.120002 -1.649593   D       NaN
4 -0.710129 -1.563575 -0.343713   A -0.710129
5 -0.684759 -0.554275 -0.400649   B -0.554275
6  0.148388 -0.088781  0.445293   C  0.445293
7  0.974738 -0.444588  0.290779   B -0.444588
8  2.346131  0.084158 -0.855563   C -0.855563
9  0.812868 -1.308031  0.605916   D       NaN

暫無
暫無

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

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