gpt4 book ai didi

python - 如何有效地从多个 DataFrame 中获取单元格值以插入主 DataFrame

转载 作者:太空狗 更新时间:2023-10-30 00:00:50 26 4
gpt4 key购买 nike

我有 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]
})

对于 master_df 的每一行,如果 col1 值为 'M'col3 值为是'X',我想选择df1。如果col1值为'F'col3值为'Z',我想选择df2。选择合适的 DataFrame 后,我想使用 master_dfcol2 作为行索引和 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]
})

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

最佳答案

您的 master_df 只有 master_df.col1master_df.col3 的 2 个值组合。因此,一个简单的 .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

注意:如果master_df.col1master_df.col3有超过2个值的组合,你只需要np.选择而不是np.where

关于python - 如何有效地从多个 DataFrame 中获取单元格值以插入主 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com