我有两个数据框:-
df1=(15651,55)
df2=(12292,1)
df1是一个完整的数据集。 df2只包括客户的ID。客户ID列在两个数据框中是共通的,我想从df2中获取12292条唯一客户ID的记录。我想从df1中获取df2中12292条唯一客户ID的记录。
start_algorithm = time.time()
myunique = data_full['CUSTOMER_ID'].unique()
for i in myunique:
# itemp = customers_data[customers_data['Customer_ids'] == i]
# data_subset.append(itemp)
k1 = customers_data.loc[(customers_data['Customer_ids'] == i)]
但我无法做到这一点。我如何解决这个问题?
我想myunique ids应该基于你的df2(customers_data),而不是df1(full_data)
myunique = customers_data['CUSTOMER_ID'].unique()
然后,你可以应用一个布尔过滤器从df1 (full)中选择那些出现在myunique中的数据。
new_df=data_full[data_full['Customer_ids'].isin(myunique)]
注意'CUSTOMER_ID'和'Customer_ids'的列名是不一样的,因为python是区分大小写的。这里我只假设你在customers_data中使用了'CUSTOMER_ID',在data_full中使用了'Customer_ids'。
这听起来像一个 merge
:
df_ = data_full.merge(customers_data, how='left',
left_on='CUSTOMER_ID',right_on='Customer_ids')
假设 data_full
就是你所说的 df2
在你的问题
df1中的客户ID是唯一的吗?在这种情况下,你应该用CUSTOMER_ID索引df1。
df1_indexed = df1.set_index('CUSTOMER_ID')
然后调用一个特定的客户ID子集就变得非常简单(而且快速)。
df1_indexed_subset = df1_indexed.loc[myunique, :]
其中 "myunique "是你在问题中定义的。