我有以下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
我想创建一个dataframe如下:
Date best value
1990 a 5
1991 c 2
1992 d 12
1993 a 5
因此,我希望通过使用列名找到基于另一行值的值。例如,第二个df中的值1990应该从第一个df中查找“a”,第二行应该从第一个df中查找“c”(=2)。
有什么想法吗
7条答案
按热度按时间vwkv1x7d1#
有一个内置的
lookup
函数可以处理这种情况(按行/列查找)。我不知道它是如何优化的,但可能比应用解决方案更快。xt0899hw2#
您创建了一个查找函数,并按行调用 Dataframe 上的
apply
,但这对于大型dfs不是很有效ldfqzlk83#
你可以使用
np.where
来实现,如下所示。我认为这样会更有效率结果
wbgh16ku4#
使用按索引列标签查找值,因为
DataFrame.lookup
自1.2.0版起已弃用:cyvaqqii5#
lookup
自版本1.2.0起已弃用。使用melt
,您可以将列“反透视”到行轴,其中列名默认存储在列variable
中,其值存储在value
中。query
只返回列best
和variable
相等的行。drop
和sort_values
用于匹配您请求的格式。输出:
flmtquvp6#
一个使用Map器字典的简单解决方案:
输出:
azpvetkf7#
你可以像这样查找一个坐标列表