我有一本字典,我想从中决定要使用哪种列值选择某种类似于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”
答案 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