python - 合并返回奇数长度

标签 python python-3.x pandas

我在完成一项相对简单的任务时遇到问题...

我有两个数据框: 我从 csv 读取的 df_sample

+------+-----------+-------+-----------+
| key  | Full Text | Date  | Publisher |
+------+-----------+-------+-----------+
| abcd | foofoo    | date1 | a         |
| bcde | barbar    | date2 | b         |
| cdef | foobar    | date3 | c         |
+------+-----------+-------+-----------+

len(df_sample) = 20000

df_labels 我从 Excel 中读取

+------+----------+--------+--------+
| key  | relevant | other  | other2 |
+------+----------+--------+--------+
| abcd | yes      | blabla | blabla |
| bcde | no       | blabla | blabla |
| cdef | no       | blabla | blabla |
| defg | yes      | blabla | blabla |
+------+----------+--------+--------+

len(df_labels) = 219000

我想在键上连接两个表,为第一个数据帧中的每个键分配相关值。所需的输出将如下所示:

+------+-----------+-------+-----------+----------+
| key  | Full Text | Date  | Publisher | relevant |
+------+-----------+-------+-----------+----------+
| abcd | foofoo    | date1 | a         | yes      |
| bcde | barbar    | date2 | b         | no       |
| cdef | foobar    | date3 | c         | no       |
+------+-----------+-------+-----------+----------+

我似乎实现了这一点,但为什么以下给出了 27377 个结果而不是 20000 个结果(如原始左表中所示):

df = pd.merge(left=df_sample, right=df_labels, on="key")

最佳答案

您看到了额外的行,因为键在两个 df 中都不是唯一的,在您的情况下是第二个 df。您需要决定是否需要重复的行(这是当前的行为),还是要删除第二个 df 中的重复行:

df_labels = df_labels.drop_duplicates(subset='key')

默认情况下,这将仅保留第一个重复项,如果您想要其他行为,例如保留最后一个,则可以传递:keep='last' 请参阅 docs

关于python - 合并返回奇数长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182318/

相关文章:

python - filehandle.tell() 函数的奇怪行为

python - Makefile - 我应该如何提取嵌入在 `pyproject.toml` 中的版本号?

python - 从图形 Python 程序中使用 sudo 运行命令

python - 在Ubuntu16.04上,如何重复运行python脚本-使用crontab

python - 尝试使用棉花糖使用 data_key 加载数据时出现“丢失数据”

python - 如何在没有保证观测数量的情况下使用 Pandas 滚动平均值

python-3.x - 导入 'PunktWordTokenizer' 时出错

python - 我如何绘制分成类别的数据的相对频率?

python- 有效地将纬度从 ddmm.ssss 转换为度数

python - 值与一组值的矢量化比较