gpt4 book ai didi

python - 合并具有两个键列和重复键出现的数据帧( Pandas )

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:59 25 4
gpt4 key购买 nike

我正在尝试合并两个具有两个键列的数据集,并且键重复出现,但是,我无法获得我想要的结果。为了简化我这里有一个例子:

数据框 A

   a  b    x
0 0 0 100
1 0 1 101
2 0 2 102
3 1 1 103

数据框 B

   a  b  y
0 0 0 C
1 0 1 A
2 0 1 B
3 1 1 C
4 1 1 D

我正在尝试对列“a”和“b”进行左连接合并操作:

C=A.merge(B,how='left',on=['a','b'])

输出是

数据框 C

   a  b    x    y
0 0 0 100 NaN
1 0 1 101 NaN
2 0 2 102 NaN
3 1 1 103 NaN

我真正想要的是:

数据框 C

   a  b    x    y
0 0 0 100 C
1 0 1 101 A
2 0 1 101 B
3 0 2 102 NaN
4 1 1 103 C
5 1 1 103 D

我尝试了“how=”参数的 4 个不同选项,但没有任何结果。

请注意,在 Dataiku 上,仅使用左连接我得到了这个结果。我搜索了一个没有成功的解决方案。我希望你能帮我找到它。提前致谢。

Edit1:“外部”选项:

C=pd.merge(A,B,how='outer',on=['a','b'])

C
Out[241]:
a b x y
0 0.0 0.0 100.0 NaN
1 0.0 1.0 101.0 NaN
2 0.0 2.0 102.0 NaN
3 1.0 1.0 103.0 NaN
4 0.0 0.0 NaN C
5 0.0 1.0 NaN A
6 0.0 1.0 NaN B
7 1.0 1.0 NaN C
8 1.0 1.0 NaN D

Edit2:添加有关数据框的详细信息

A.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
a 4 non-null int32
b 4 non-null int32
x 4 non-null int32
dtypes: int32(3)
memory usage: 128.0 bytes

B.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
a 5 non-null object
b 5 non-null object
y 5 non-null object
dtypes: object(3)
memory usage: 200.0+ bytes

最佳答案

您的 .info() 输出揭示了问题:您的 a 和 b 列的类型不同。在 A 中,它们是 int32,但在 B 中,它们是对象(几乎肯定是字符串)。例如,如果它们都是整数:

In [32]: A.merge(B, how='left')
Out[32]:
a b x y
0 0 0 100 C
1 0 1 101 A
2 0 1 101 B
3 0 2 102 NaN
4 1 1 103 C
5 1 1 103 D

In [33]: A.merge(B, how='outer')
Out[33]:
a b x y
0 0 0 100 C
1 0 1 101 A
2 0 1 101 B
3 0 2 102 NaN
4 1 1 103 C
5 1 1 103 D

但是如果 B 包含字符串,我们会重现您的问题:

In [35]: A.merge(B.astype(str), how='left')
Out[35]:
a b x y
0 0 0 100 NaN
1 0 1 101 NaN
2 0 2 102 NaN
3 1 1 103 NaN

In [36]: A.merge(B.astype(str), how='outer')
Out[36]:
a b x y
0 0.0 0.0 100.0 NaN
1 0.0 1.0 101.0 NaN
2 0.0 2.0 102.0 NaN
3 1.0 1.0 103.0 NaN
4 0.0 0.0 NaN C
5 0.0 1.0 NaN A
6 0.0 1.0 NaN B
7 1.0 1.0 NaN C
8 1.0 1.0 NaN D

弄清楚为什么你的 B 包含字符串,以防上游出现问题,然后在那里修复它或稍后强制恢复为整数。

关于python - 合并具有两个键列和重复键出现的数据帧( Pandas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48953032/

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