熊猫与“左”选项合并正在丢失左侧数据框中的行

Posted

技术标签:

【中文标题】熊猫与“左”选项合并正在丢失左侧数据框中的行【英文标题】:Pandas merge with "left" option is losing rows in left data frame 【发布时间】:2022-01-23 14:29:17 【问题描述】:

我有 2 个数据框。 第一个(左)数据框有 5,000,000 行,第二个只有 47,000 行。 当我尝试使用“左”选项合并这些数据框时,我只得到 47.000 行。

first = pd.read_csv('first.csv')
second = pd.DataFrame(first['id'])
second.drop_duplicates(inplace=True)
second['mark'] = second['id'].apply(lambda x:get_mark(x))
new=first.merge(second,how='left',on='id')

在这里我得到了 47,000 个原始数据。

重新打开第一个数据框。

first = pd.read_csv('first.csv')
new=first.merge(second,how='left',on='id')

我在这里得到了 5,000,000 个带有标记的原始数据。

如何避免重新加载第一个数据帧或解决此问题?

【问题讨论】:

您能提供数据集的链接吗?如果需要,您可以删除敏感数据。还提供完整代码(读取、索引设置、形状、合并等) 不幸的是,所有数据都是敏感的(客户日志),所以我无法访问数据。我已将所有代码添加到主帖中。 【参考方案1】:

我没有发现代码有任何问题,所以您需要查看数据:

import pandas as pd
import numpy as np
import sys


print('python version ', sys.version)
def get_mark(x):
    # just random data
    return np.random.normal(x, 2) 

# Simulate data
first_series = np.random.randint(0, 47000, 5000000)
first = pd.DataFrame(first_series, columns=['id'])

second = pd.DataFrame(first['id'])
second.drop_duplicates(inplace=True)
second['mark'] = second['id'].apply(lambda x:get_mark(x))

print('Shape first', first.shape)
print('Shape second', second.shape)

# merge
new=first.merge(second,how='left',on='id')


print('Shape new',  new.shape)
python version  3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)]
Shape first (5000000, 1)
Shape second (47000, 2)
Shape new (5000000, 2)

【讨论】:

以上是关于熊猫与“左”选项合并正在丢失左侧数据框中的行的主要内容,如果未能解决你的问题,请参考以下文章

基于多个值合并熊猫数据框中的行

如何与熊猫数据框中的键和键列表合并

从另一个数据框中删除包含相同日期的行-python-大熊猫

熊猫应用函数将多个值返回到熊猫数据框中的行

比较熊猫数据框中的行值

比较熊猫数据框中的行值