gpt4 book ai didi

Python Pandas-根据索引顺序合并两个数据框

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:12 24 4
gpt4 key购买 nike

我有两个 Pandas 数据框。第一个是:

df1 = pd.DataFrame({"val1" : ["B2","A1","B2","A1","B2","A1"]})

第二个数据框是:

df2 = pd.DataFrame({"val1" : ["A1","A1","A1","B2","B2","B2"],
"val2" : [10, 13, 16, 11, 20, 22]})

我想以一种使用来自 df1 的行排序并且来自 df2 的值遵循此排序的方式将两者合并在一起。理想情况下,我希望它看起来像这样:

df_final = pd.DataFrame({"val1" : ["B2","A1","B2","A1","B2","A1"],
"val2" : [11, 10, 20, 13, 22, 16]})

我已经尝试将合并功能与 left_on 和 right_on 一起使用,但我没有得到我正在寻找的输出。任何帮助将不胜感激。

最佳答案

你可以这样做:

  1. ['val1', 'val2']df2中的值进行排序,按val1分组并将其存储为 g2?
  2. idx 列添加到 df1 中,用于从 df2 中选取值

代码:

In [176]: df1['idx'] = 1

In [177]: df1['idx'] = df1.groupby('val1')['idx'].cumsum()-1

In [178]: df1
Out[178]:
val1 idx
0 B2 0
1 A1 0
2 B2 1
3 A1 1
4 B2 2
5 A1 2

In [179]: g2 = df2.sort_values(['val1', 'val2']).groupby('val1')

In [180]: g2.groups
Out[180]: {'A1': [0, 1, 2], 'B2': [3, 4, 5]}

In [181]: df2.iloc[g2.groups['A1'][1]]
Out[181]:
val1 A1
val2 13
Name: 1, dtype: object

In [182]: df1.apply(lambda x: df2.iloc[g2.groups[x['val1']][x['idx']]], axis=1)
Out[182]:
val1 val2
0 B2 11
1 A1 10
2 B2 20
3 A1 13
4 B2 22
5 A1 16

关于Python Pandas-根据索引顺序合并两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36390893/

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