如何有效地从多个数据框中获取单元格值以插入到主数据框中

hbd*_*dch 6 python dataframe pandas

我有3个不同的DataFrame(1个主DataFrame和2个其他DataFrame)。我试图在我的主DataFrame中添加一列,而该列的元素是其他两个DataFrame中的不同单元格值。我正在使用主DataFrame的两列来确定需要从中获取数据的2个DataFrame中的哪一个,以及另外两列以用作所选DataFrame中特定单元格的索引。


master_df = pd.DataFrame({
    'col1': ['M', 'F', 'F', 'M'],
    'col2': [0, 1, 2, 3],
    'col3': ['X', 'Z', 'Z', 'X'],
    'col4': [2021, 2022, 2023, 2024]
})

df1 = pd.DataFrame({
    2021: [.632, .214, .987, .555],
    2022: [.602, .232, .287, .552],
    2023: [.932, .209, .347, .725],
    2024: [.123, .234, .9873, .5005]
})

df2 = pd.DataFrame({
    2021: [.6123, .2214, .4987, .555],
    2022: [.6702, .232, .2897, .552],
    2023: [.9372, .2, .37, .725],
    2024: [.23, .24, .873, .005]
})

Run Code Online (Sandbox Code Playgroud)

对于的每一行master_df,如果col1值为'M'和,col3'X'我要选择df1。如果col1值是'F'col3值是'Z',我要选择df2。一旦选择了适当的DataFrame,我想col2master_df用作行索引col4,将master_df用作列索引。最后,我将获取选定的单元格值并将其放入要添加到的新列中master_df

在此示例中,最后master_df应如下所示:

master_df = pd.DataFrame({
    'col1': ['M', 'F', 'F', 'M'],
    'col2': [0, 1, 2, 3],
    'col3': ['X', 'Z', 'Z', 'X'],
    'col4': [2021, 2022, 2023, 2024],
    'col5': [.632, .232, .37, .5005]
})

Run Code Online (Sandbox Code Playgroud)

我尝试使用for循环遍历master_df,但是它非常慢,因为DataFrame正在使用的s每个都有数百万行。有什么有效的熊猫解决方案吗?

And*_* L. 3

您的和master_df的值只有 2 种组合。因此,一个简单的方法将产生您想要的输出master_df.col1master_df.col3.lookupnp.where

df1_val = df1.lookup(master_df.col2, master_df.col4)
df2_val = df2.lookup(master_df.col2, master_df.col4)
master_df['col5'] = np.where(master_df.col1.eq('M') & master_df.col3.eq('X'), df1_val, df2_val)

Out[595]:
  col1  col2 col3  col4    col5
0  M    0     X    2021  0.6320
1  F    1     Z    2022  0.2320
2  F    2     Z    2023  0.3700
3  M    3     X    2024  0.5005
Run Code Online (Sandbox Code Playgroud)

注意:如果master_df.col1master_df.col3具有超过 2 个值的组合,则只需np.select代替np.where