gpt4 book ai didi

python - 如何根据 Pandas 中的一列列表组合两个数据框

转载 作者:行者123 更新时间:2023-12-03 15:53:51 25 4
gpt4 key购买 nike

import pandas as pd

可重现的设置
我有两个数据框:
df=\
pd.DataFrame.from_dict({'A':['xy','yx','zy','zz'],
'B':[[1, 3],[4, 3, 5],[3],[2, 6]]})

df2=\
pd.DataFrame.from_dict({'B':[1,3,4,5,6],
'C':['pq','rs','pr','qs','sp']})
df好像:
    A          B
0 xy [1, 3]
1 yx [4, 3, 5]
2 zy [3]
3 zz [2, 6]
df2好像:
   B   C
0 1 pq
1 3 rs
2 4 pr
3 5 qs
4 6 sp

目的
我想将这两者结合起来形成 res :
res=\
pd.DataFrame.from_dict({'A':['xy','yx','zy','zz'],
'C':['pq','pr','rs','sp']})
IE
    A   C
0 xy pq
1 yx pr
2 zy rs
3 zz sp
xy 的行在 df有 lsit [1,3] .有一行值为 1在栏目 Bdf2 . C列有值 pq在那一行,所以我合并了 xypq .接下来的两行相同。最后一行: B 列中没有值为 2 的值在 df2 ,所以我选择值 6 ( df 中的最后一行有列表 [2,6] )。


如何在不遍历数据帧的情况下实现这一点?

Spanish SO 中的一个非常相似的帖子,这启发了这篇文章。

最佳答案

您可以 explode “B”到单独的行,然后在“B”上合并并删除重复项。
非常感谢 Asish M. 在评论中指出了一个潜在的排序错误。

(df.explode('B')
.merge(df2, on='B', how='left')
.dropna(subset=['C'])
.drop_duplicates('A'))

A B C
0 xy 1 pq
2 yx 4 pr
5 zy 3 rs
7 zz 6 sp

理想情况下,以下应该有效:
df.explode('B').merge(df2).drop_duplicates('A')
但是,pandas(截至撰写本文时,版本 1.2dev)不会保留合并时左键的顺序,这是一个错误,请参阅 GH18776 .
同时,我们可以使用左合并的解决方法,如上所示。

关于python - 如何根据 Pandas 中的一列列表组合两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65444396/

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