我有两个数据帧:

帧A:

OB_ID    CA_ID    col1    col2    col3
4         4        a       b       c
4         4        a       d       b
3         5        c       c       e

这个数据帧非常大,我不确定其中的所有ID.

帧B:

OB_ID    CA_ID    colZ
1         1        sky
4         4        fire
4         3        data

我想仅当OB_ID和CA_ID匹配时才将COLZ添加到帧A,否则在该 colored颜色 中添加NAN/NULL,结果数据帧如下所示:

OB_ID    CA_ID    col1    col2    col3    colz
4         4        a       b       c       fire
4         4        a       d       b       fire
3         5        c       c       e       NA/unknown

框架A的形状是8666515行×3列,B的形状是367469行×342列,但当我这样做时

df3 = pd.merge(frameA, frameB, on=['OB_ID','CA_ID'], how='left')
df3.shape

它给出了形状:1490420 rows × 343 columns,但我不明白为什么行数从367469行增加到1490420行.

推荐答案

左合并后的结果行数大于left数据帧的行数,这是因为on部分中的非唯一条目,即左侧框架的["OB_ID", "CA_ID"]列,以及Pandas 如何try align件事情.例如,帧A具有两次配对[4, 4].比方说,如果帧B有3次,则对齐过程规定合并后的结果帧将具有2x3=6[4, 4]行,即将取叉积.(注意:我希望示例[4, 4]不会混淆:4在那里重复两次是not[4, 4]作为pair/row重复两次.)

这是一个与Pandas 产生共鸣的主题:

>>> pd.Series([12, 3], index=[0, 0]) + pd.Series([40, 50, 60], index=[0, 0, 0])

你对这次求和结果的指数和大小有何看法?是的,它是2x3=6个零.

回到问题上来.我们可以将框架A的相关列值设置为map,而不是合并,对吗?mapper将对框架B稍作修改:A系列是一种字典(映射),其索引是"键"和"值",好吧,是相应的值.所以我们将["OB_ID", "CA_ID"]作为指数,"colZ"作为值;那就是mapper.问题是,我们不能直接映射df[["OB_ID", "CA_ID"]]...因为DataFrame不能直接映射.但多重指数才是!所以我们开始吧:

common_cols         = ["OB_ID", "CA_ID"]
target_col          = "colZ"
mapper              = frame_B.set_index(common_cols )[target_col]
frame_A[target_col] = pd.MultiIndex.from_frame(frame_A[common_cols]).map(mapper)

得到

>>> frame_A

   OB_ID  CA_ID col1 col2 col3  colZ
0      4      4    a    b    c  fire
1      4      4    a    d    b  fire
2      3      5    c    c    e   NaN

Python相关问答推荐

我从带有langchain的mongoDB中的vector serch获得一个空数组

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

rame中不兼容的d类型

如何使用它?

OR—Tools CP SAT条件约束

在单个对象中解析多个Python数据帧

索引到 torch 张量,沿轴具有可变长度索引

用砂箱开发Web统计分析

如何指定列数据类型

Python Pandas获取层次路径直到顶层管理

Polars将相同的自定义函数应用于组中的多个列,

为什么常规操作不以其就地对应操作为基础?

关于两个表达式的区别

SpaCy:Regex模式在基于规则的匹配器中不起作用

如何将一个文件的多列导入到Python中的同一数组中?

从列表中分离数据的最佳方式

EST格式的Azure数据库笔记本中的当前时间戳

保存由PYTHON在EXCEL中所做更改的问题

Pip:卸载`-e`安装过程中安装的所有pkgs

如何在polars group_by中将多个行分组到列表中