基于条件在数据帧中查找值

2024-09-25 08:38:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧-一个是主数据帧(main_df),另一个是查找数据帧(lookup_df)。在主数据框中有两个条件,我需要使用它们在查找数据框中查找值。我的数据如下:

主数据框

Bore      Temperature
4            200
0.75         500
6            200
2            400
3            200
0.75         300

查找\u df

Bore      200      300      400      500
0.5       0.5      0.5      0.5      0.5
0.75      0.5      0.5      0.5      0.5
1         0.5      0.5      0.5      0.5
2         0.5      0.5      0.5      1.0
3         0.5      0.5      1.0      1.0
4         0.5      1.0      1.0      1.0
6         1.0      1.0      1.0      1.0

我的目标是在主目录中有一个新的列,它具有已查找的值。你知道吗

最终主数据框

Bore      Temperature      Value
4            200            0.5
0.75         500            0.5  
6            200            1.0
2            400            0.5
3            200            0.5
0.75         300            0.5

我试过用pd.合并通过各种迭代,但似乎无法让它工作。除此之外,还有更好的方法吗pd合并?你知道吗


Tags: 数据方法目标dfvaluemainlookup条件
3条回答

^{}与create index by Bore列一起使用,如有必要,将列转换为整数:

df['Value'] = (lookup_df.set_index('Bore').rename(columns=int)
                        .lookup(df['Bore'], df['Temperature']))
print (df)
   Bore  Temperature  Value
0  4.00          200    0.5
1  0.75          500    0.5
2  6.00          200    1.0
3  2.00          400    0.5
4  3.00          200    0.5
5  0.75          300    0.5

如果可能缺少某些值,因此第一个解决方案失败,则可以将^{}^{}一起使用,如果值是melt之后Temperature列中的整数,则可以随意删除assign

df1 = (lookup_df.melt('Bore', var_name='Temperature', value_name='Value')
                .assign(Temperature = lambda x: x['Temperature'].astype(int)))
df = df.merge(df1, how='left')
print (df)
   Bore  Temperature  Value
0  4.00          200    0.5
1  0.75          500    0.5
2  6.00          200    1.0
3  2.00          400    0.5
4  3.00          200    0.5
5  0.75          300    0.5

下面是使用列表理解的另一种方法:

main_df['value'] = [lookup.loc[lookup['Bore'] == x, str(y)].values[0]
                            for x,y in zip(main_df['Bore'], main_df['Temperature'])]

您可以按孔+温度堆叠和合并:

main_df = main_df.merge(df_lookup.stack().reset_index().set_axis(['Bore', 'Temperature', 'Value'], axis=1, inplace=False), on=['Bore', 'Temperature'], how='left')

相关问题 更多 >