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,我想col2将master_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每个都有数百万行。有什么有效的熊猫解决方案吗?
您的和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.col1和master_df.col3具有超过 2 个值的组合,则只需np.select代替np.where
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |