熊猫查找基于价值
问题描述:
我有以下数据框:熊猫查找基于价值
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
我想提出一个数据帧如下:
Date best value
1990 a 5
1991 c 2
1992 d 12
1993 a 5
所以我期待基于另一行寻找价值值使用列名称。例如,第二个df中的1990的值应该从第一个df查找“a”,第二个行应该从第一个df中查找“c”(= 2)。
任何想法?
答
您创建一个查询功能,在您的数据帧逐行调用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
答
有一个内置的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
任何机会,你可以解释这段代码如何工作? – 3kstc 2016-11-15 03:30:50
@ 3kstc基本上我们使用'apply'通过传递arg'axis = 1来遍历行,所以这里的lambda是行,所以对于第一行'x'是第一行,然后我们返回一个特定的列,它在这种情况将是'最好'的值,以索引该行 – EdChum 2016-11-15 09:57:20