pandas 通过与第二个数据框匹配并拉取数据来创建数据框列

qij5mzcb  于 2023-05-27  发布在  其他
关注(0)|答案(2)|浏览(186)

我有两个dataframes:
df1:

ID         STORE_ID    total_visits_area
 10000085   306A        3
 10000100   060A        2
 10000100   059A        1

df2:

ID      STORE_ID_1  STORE_ID_2  ACCOUNT_NAME    
05451394    060A       029B         wade O'Donnell
10000100    060A       059A         Jane Smith

我想在df2中添加一个2列,其中我匹配df1中的BH_IDSTORE_ID,并引入访问次数,其中如果STORE_ID匹配STORE_ID_1中的df2,则访问将被引入STORE_ID_1_VISITS
输出df:

ID      STORE_ID_1  STORE_ID_2  ACCOUNT_NAME    STORE_ID_1_VISITS  STORE_ID_2_VISITS
05451394    060A       059A     wade O'Donnell  2                  0
10000100    060A       059A     Jane Smith      2                  1

我尝试使用np.where,但得到一个ValueError:只能比较具有相同标签的Series对象
任何帮助都将不胜感激

tez616oj

tez616oj1#

您需要使用合并功能。类似于:
df_out=pd.merge(df2,df1.rename(columns='total_visits_area':'STORE_ID_1_VISITS'},left_on=['ID','STORE_ID_1'],right_on=['ID','STORE_ID'])
然后在第二列上又一次
df_out=pd.merge(df2,df1.rename(columns='total_visits_area':'STORE_ID_2_VISITS'},left_on=['ID','STORE_ID_2'],right_on=['ID','STORE_ID'])

myss37ts

myss37ts2#

您可以使用Map系列:

smap = df1.set_index('STORE_ID')['total_visits_area']
df2['STORE_ID_1_VISITS'] = df2['STORE_ID_1'].map(smap).fillna(0).astype(int)
df2['STORE_ID_2_VISITS'] = df2['STORE_ID_2'].map(smap).fillna(0).astype(int)

输出:

>>> df2
         ID STORE_ID_1 STORE_ID_2    ACCOUNT_NAME  STORE_ID_1_VISITS  STORE_ID_2_VISITS
0   5451394       060A       029B  wade O'Donnell                  2                  0
1  10000100       060A       059A      Jane Smith                  2                  1

相关问题