使用 pandas 在数据帧之间进行值查找?
Doing value lookups between dataframes with pandas?
我有一个包含用户及其两个主要特征的数据框
df_a:
我有第二个数据框,其中包含这些功能的实际值
df_b:
我正在尝试从 df_b 中查找实际值,使用 df_a 中给定的顶级特征,得到如下内容:
df_c
我目前正在使用 for 循环执行此查找,但速度很慢...希望有更合适的方法。谢谢
这样的东西对你有用:
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
我有一个包含用户及其两个主要特征的数据框
df_a:
我有第二个数据框,其中包含这些功能的实际值
df_b:
我正在尝试从 df_b 中查找实际值,使用 df_a 中给定的顶级特征,得到如下内容:
df_c
我目前正在使用 for 循环执行此查找,但速度很慢...希望有更合适的方法。谢谢
这样的东西对你有用:
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