Warm tip: This article is reproduced from serverfault.com, please click

python-用 pandas 在数据框之间进行值查询吗?

(python - Doing value lookups between dataframes with pandas?)

发布于 2020-12-01 20:53:48

我有一个包含用户及其两个主要功能的数据框

df_a: 在此处输入图片说明

我还有第二个数据框,其中包含这些功能的实际值

df_b:

在此处输入图片说明

我正在尝试使用df_a中给定的主要功能从df_b中查找实际值,以得到如下所示的内容:

df_c

在此处输入图片说明

我目前正在使用for循环进行此查找,而且速度很慢...希望有一种更合适的方法。谢谢

Questioner
L Xandor
Viewed
0
Quang Hoang 2020-12-02 05:02:40

这样的事情将为你工作:

df_c = (df_a.melt('UID', value_name='variable', var_name='feat')
     .merge(df_b.melt('UID'), on=('UID','variable'))
     .pivot(index='UID',columns='feat')

)

输出:

        variable                   value            
feat 2nd_feature top_feature 2nd_feature top_feature
UID                                                 
123        feat2       feat3    0.720324    0.000114
124        feat3       feat1    0.092339    0.302333
125        feat2       feat1    0.345561    0.186260
126        feat2       feat3    0.419195    0.685220

或手动一些lookup

df_b = df_b.set_index('UID')

for col in ['top_feature', '2nd_feature']:
    df_a[f'{col}_value'] = df_b.lookup(df_a['UID'], df_a[col])

所以你修改df_a为:

   UID top_feature 2nd_feature  top_feature_value  2nd_feature_value
0  123       feat3       feat2           0.000114           0.720324
1  124       feat1       feat3           0.302333           0.092339
2  125       feat1       feat2           0.186260           0.345561
3  126       feat3       feat2           0.685220           0.419195