gpt4 book ai didi

python - Pandas 连接导致形状不匹配

转载 作者:行者123 更新时间:2023-12-05 04:25:05 25 4
gpt4 key购买 nike

我有两个数据框:

框架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,否则在该位置添加 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 行 × 343 列,但我不明白为什么行数从 367469 增加到 1490420。

最佳答案

由于 on 部分中的非唯一条目,即 ["左框架的 OB_ID", "CA_ID"] 列,以及 pandas 如何尝试对齐事物。例如,frameA 有两次 [4, 4] 对。例如,如果 frameB 有 3 次,则对齐过程表明合并后的结果帧将有 2 x 3 = 6 [4, 4] 行,即叉积将为采取。 (注意:我希望示例 [4, 4] 不会造成混淆:不是 4 在那里重复了两次;而是 [4, 4] 作为/重复两次。)

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

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

关于这个求和结果的索引和大小,你怎么看?是的,它是 2 x 3 = 6 个零。

回到问题...除了合并,我们可以映射 frameA 的相关列值,对吗? mapper 将被 frameB 稍微修改:Series 是一种字典(映射),其索引是“键”和“值”,以及相应的值。所以我们将 ["OB_ID", "CA_ID"] 作为索引,"colZ" 作为值;这将生成 mapper。问题是,我们不能直接映射 df[["OB_ID", "CA_ID"]]... 因为 DataFrame 不可直接映射。但是 MultiIndex 是!所以我们开始吧:

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 - Pandas 连接导致形状不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73344153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com