pd.merge(data_frame, data_frame1, on='VIN', how='left')和pd.merge(data,data1,left_on='VIN',right_on='VIN',how='left')有什么区别
时间: 2024-01-07 09:03:50 浏览: 74
这两个`merge()`函数的区别在于指定合并的列的方式。
1. `pd.merge(data_frame, data_frame1, on='VIN', how='left')`
- 这种用法是在两个DataFrame中都有名为'VIN'的列,它们的列名相同,通过`on`参数指定要合并的列名。
- 使用`how='left'`表示进行左连接,即以左边的DataFrame为基准,保留左边DataFrame中所有的行,并将右边DataFrame中匹配到的行合并进来。
2. `pd.merge(data, data1, left_on='VIN', right_on='VIN', how='left')`
- 这种用法是在两个DataFrame中有不同的列名,需要通过`left_on`和`right_on`参数分别指定左右两个DataFrame中用于合并的列名。
- 使用`how='left'`表示进行左连接,保留左边DataFrame中所有的行,并将右边DataFrame中匹配到的行合并进来。
总结区别:
- 在第一种用法中,两个DataFrame中要合并的列名相同,只需要使用`on`参数指定列名即可。
- 在第二种用法中,两个DataFrame中要合并的列名不同,需要使用`left_on`和`right_on`参数分别指定左右两个DataFrame中的列名。
希望这样解释清楚了这两种用法的区别。如果还有其他问题,请随时提问。
相关问题
merged_data = pd.merge(data_frame, data_frame1, on='VIN', how='left')是实现什么功能
`merged_data = pd.merge(data_frame, data_frame1, on='VIN', how='left')`这行代码的功能是将两个DataFrame对象 `data_frame` 和 `data_frame1` 按照共同的列名 `'VIN'` 进行左连接操作,并将结果赋值给新的DataFrame对象 `merged_data`。
左连接是一种合并操作,它基于指定的列(在这里是 `'VIN'` 列),将两个DataFrame对象按照共同的列值进行匹配,并将匹配成功的行合并在一起。左连接的含义是以`data_frame`为主表,将匹配到的`data_frame1`中的行合并到结果中。
具体来说,左连接的行为如下:
- 对于`data_frame`中的每一行,根据 `'VIN'` 列的值,在`data_frame1`中找到匹配的行。
- 如果在`data_frame1`中找到了匹配的行,则将该行与`data_frame`中的对应行合并,并将合并结果添加到`merged_data`中。
- 如果在`data_frame1`中找不到匹配的行,则将`data_frame`中的对应行与缺失值(NaN)合并,并将合并结果添加到`merged_data`中。
左连接操作使得我们可以根据共同的列值将两个DataFrame对象进行关联,从而进行数据合并、拼接或者筛选等操作。
需要注意的是,`how='left'`参数表示使用左连接方式,即以`data_frame`为主表,保留`data_frame`的所有行,同时匹配合并`data_frame1`中的匹配行。如果某行在`data_frame1`中没有匹配到对应的行,则在合并结果中会出现缺失值。
# 用户在多少商家领取并消费优惠券 pivot = pd.pivot_table(data[data['Date'].notnull()&data['Date_received'].notnull()][['User_id', 'Merchant_id']], index=keys1, values='Merchant_id', aggfunc=lambda x:len(set(x))) pivot = pd.DataFrame(pivot).rename(columns={'Merchant_id':prefixs + 'received_consume_differ_merchant'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户对不同商家领取优惠券的核销率(领券消费数/领券数) feature_user[prefixs+'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float')/feature_user[prefixs + 'received_differ_merchant'].astype('float') # 用户15天内消费优惠券数量 pivot = pd.pivot_table(data[data['label']==1][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left') # 用户15天内未消费优惠券数量 pivot = pd.pivot_table(data[data['label']==0][['User_id', 'cnt']], index=keys1, values='cnt', aggfunc=len) pivot = pd.DataFrame(pivot).rename(columns={'cnt': prefixs+'15_not_consume_cnt'}).reset_index() feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')用groupby(函数改写)
# 用户在多少商家领取并消费优惠券
pivot = data[data['Date'].notnull() & data['Date_received'].notnull()][['User_id', 'Merchant_id']].groupby(keys1)['Merchant_id'].nunique().reset_index()
pivot = pivot.rename(columns={'Merchant_id': prefixs + 'received_consume_differ_merchant'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户对不同商家领取优惠券的核销率(领券消费数/领券数)
feature_user[prefixs + 'received_consume_merchant_rate'] = feature_user[prefixs + 'received_consume_differ_merchant'].astype('float') / feature_user[prefixs + 'received_differ_merchant'].astype('float')
# 用户15天内消费优惠券数量
pivot = data[data['label'] == 1][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
# 用户15天内未消费优惠券数量
pivot = data[data['label'] == 0][['User_id', 'cnt']].groupby(keys1)['cnt'].count().reset_index()
pivot = pivot.rename(columns={'cnt': prefixs+'15_not_consume_cnt'})
feature_user = pd.merge(feature_user, pivot, on=keys1, how='left')
阅读全文