【问题标题】:Selecting from one dataframe using values from a second dataframe使用来自第二个数据帧的值从一个数据帧中进行选择
【发布时间】:2019-04-15 13:12:38
【问题描述】:

我有两个具有相同索引和列的数据框:

In: import pandas as pd
import numpy as np
import random
df1 = pd.DataFrame({'A' : [ random.random(), random.random(), random.random()],
                   'B' : [ random.random(), random.random(), random.random()],
                   'C' : [ random.random(), random.random(), random.random()]})
df2 = pd.DataFrame({'A' : [random.randint(0,10), random.randint(0,10), random.randint(0,10)],
                   'B' : [random.randint(0,10), random.randint(0,10), random.randint(0,10)],
                   'C' : [random.randint(0,10), random.randint(0,10), random.randint(0,10)]})


df1
Out:
    A   B   C
0   0.424566    0.054485    0.830993
1   0.673692    0.754941    0.621544
2   0.890594    0.805776    0.878123
In: df2
Out:

    A   B   C
0   9   9   3
1   4   6   6
2   10  2   9

我想根据df2 中的对应值从df1 中选择值并将其作为数组返回。

例如在上面的示例中按值6 选择将返回[0.754941, 0.621544]

我查看了mask,但看不到如何将掩码从一个 df 应用到第二个 df。

【问题讨论】:

  • df1[df2==6] 怎么样?
  • 使用df1.values[df2.eq(6)] 得到你想要的数组。

标签: python pandas selection mask


【解决方案1】:

如果两个 DataFrmes 中的索引和列相同,则可以使用 df2 的掩码索引和由 to_numpyvalues 创建的 2d array

#pandas 0.24+
a = df1.to_numpy()[df2 == 6]
#oldier pandas versions
#a = df1.values[df2 == 6]
print (a)
[0.754941 0.621544]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2021-04-26
    相关资源
    最近更新 更多