根据字典键选择列值

时间:2018-09-09 22:00:57

标签: python pandas

我有一本字典,我想从中决定要使用哪种列值选择某种类似于if条件的字典。

     import pandas as pd
     dictname = {'A': 'Select1', 'B':'Select2','C':'Select3'}
     DataFrame = pd.DataFrame([['A',1,2,3,4],['B',1,2,3,4],['B',1,3,4,5],['C',1,5,6,7]], columns=['Name','Score','Select1','Select2','Select3'])

因此,我想创建一个名为ChosenValue的新卷材,该卷材基于“名称”列中的行值来选择值,例如如果'Name'='A'中的行值,则ChosenValue应等于'Select1'列的值,如果'Name'='B'中的行值,则ChosenValue应等于'Select2'的值,依此类推。我真的很想把它链接到字典“ dictname”

2 个答案:

答案 0 :(得分:1)

使用Index.get_indexer获取索引列表。之后,您可以索引到底层的numpy数组。

idx = df.columns.get_indexer(df.Name.map(dictname))
df['ChosenValue'] = df.values[np.arange(len(df)), idx]

df
  Name  Score  Select1  Select2  Select3 ChosenValue
0    A      1        2        3        4           2
1    B      1        2        3        4           3
2    B      1        3        4        5           4
3    C      1        5        6        7           7

答案 1 :(得分:1)

如果您知道每个名称都在词典中,则可以使用lookup

In [104]: df["ChosenValue"] = df.lookup(df.index, df.Name.map(dictname))

In [105]: df
Out[105]: 
  Name  Score  Select1  Select2  Select3  ChosenValue
0    A      1        2        3        4            2
1    B      1        2        3        4            3
2    B      1        3        4        5            4
3    C      1        5        6        7            7