Ato*_*Siv 18 python numpy dataframe pandas
我有以下DataFrame:
Date best a b c d
1990 a 5 4 7 2
1991 c 10 1 2 0
1992 d 2 1 4 12
1993 a 5 8 11 6
Run Code Online (Sandbox Code Playgroud)
我想制作如下数据帧:
Date best value
1990 a 5
1991 c 2
1992 d 12
1993 a 5
Run Code Online (Sandbox Code Playgroud)
所以我希望通过使用列名来找到基于另一个行值的值.例如,第二个df中1990的值应该从第一个df中查找"a",第二个行应该从第一个df中查找"c"(= 2).
有任何想法吗?
chr*_*isb 14
有一个内置lookup函数可以处理这种情况(按行/列查找).我不知道它是如何优化的,但可能比应用解决方案更快.
In [9]: df['value'] = df.lookup(df.index, df['best'])
In [10]: df
Out[10]:
Date best a b c d value
0 1990 a 5 4 7 2 5
1 1991 c 10 1 2 0 2
2 1992 d 2 1 4 12 12
3 1993 a 5 8 11 6 5
Run Code Online (Sandbox Code Playgroud)
您创建了一个查找函数并apply逐行调用您的数据框,但这对于大型 dfs 并不是很有效
In [245]:
def lookup(x):
return x[x.best]
df['value'] = df.apply(lambda row: lookup(row), axis=1)
df
Out[245]:
Date best a b c d value
0 1990 a 5 4 7 2 5
1 1991 c 10 1 2 0 2
2 1992 d 2 1 4 12 12
3 1993 a 5 8 11 6 5
Run Code Online (Sandbox Code Playgroud)