gpt4 book ai didi

python - 合并具有重复值的数据框上的项目

转载 作者:太空狗 更新时间:2023-10-30 00:34:12 24 4
gpt4 key购买 nike

所以我有一个数据框(或系列),其中每个“A”列总是出现 4 次,如下所示:

df = pd.DataFrame([['foo'],
['foo'],
['foo'],
['foo'],
['bar'],
['bar'],
['bar'],
['bar']],
columns=['A'])
A
0 foo
1 foo
2 foo
3 foo
4 bar
5 bar
6 bar
7 bar

我还有另一个数据框,其值类似于 A 列中的值,但它们并不总是有 4 个值。他们也有更多的专栏,像这样:

df_key = pd.DataFrame([['foo', 1, 2],
['foo', 3, 4],
['bar', 5, 9],
['bar', 2, 4],
['bar', 1, 9]],
columns=['A', 'B', 'C'])

A B C
0 foo 1 2
1 foo 3 4
2 bar 5 9
3 bar 2 4
4 bar 1 9

我想合并它们,使它们最终像这样使用类似的东西:

df.merge(df_key, how='left', on='A', copy=False)

A B C
0 foo 1 2
1 foo 3 4
2 foo NaN NaN
3 foo NaN NaN
4 bar 5 9
5 bar 2 4
6 bar 1 9
7 bar NaN NaN

但我最终得到的是这样的东西。有什么建议吗?

      A    B        C
0 foo 1 2
1 foo 3 4
2 foo 1 2
3 foo 3 4
4 foo 1 2
5 foo 3 4
6 foo 1 2
7 foo 3 4
8 bar 5 9
9 bar 2 4
10 bar 1 9
11 bar 5 9
12 bar 2 4
13 bar 1 9
14 bar 5 9
15 bar 2 4
16 bar 1 9
17 bar 5 9
18 bar 2 4
19 bar 1 9

最佳答案

您需要使用 groupby + cumcount 创建替代列来删除行的重复项,然后在调用 merge 时包含这些列:

a = df.assign(D=df.groupby('A').cumcount())
b = df_key.assign(D=df_key.groupby('A').cumcount())

a.merge(b, on=['A', 'D'], how='left').drop('D', 1)

A B C
0 foo 1.0 2.0
1 foo 3.0 4.0
2 foo NaN NaN
3 foo NaN NaN
4 bar 5.0 9.0
5 bar 2.0 4.0
6 bar 1.0 9.0
7 bar NaN NaN

关于python - 合并具有重复值的数据框上的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49364754/

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