首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用其中一列中的值为pandas数据帧建立索引

使用其中一列中的值为pandas数据帧建立索引
EN

Stack Overflow用户
提问于 2019-03-12 04:03:05
回答 2查看 75关注 0票数 3

示例数据:

代码语言:javascript
复制
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‘。

我的预期输出是:

代码语言:javascript
复制
          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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-12 04:06:08

使用isin过滤掉无效的列名,然后使用DataFrame.lookup ...“查找”你的值。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2019-03-12 04:08:35

怎么做?

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55109537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档