gpt4 book ai didi

python - pandas 在一个键和另一列内的一列值上进行左连接

转载 作者:行者123 更新时间:2023-12-01 00:42:55 25 4
gpt4 key购买 nike

如果我有 2 个 panda df,我想让 A 在 2 个条件下左连接 B,1) A.id = B.id 2) A.x in B.x_set。谁可以帮我这个事? :

答:

id  x
1 a
2 b
3 c

B:

id  x_set   detail
1 a,b,c x
1 d y
2 a,c z
2 d m
2 b n
3 a i
3 b,c j

决赛 table 应该是这样的:

id  x   detail
1 a x
2 b n
3 c j

最佳答案

如果使用 pandas==0.25 ,您可以:

  1. 将值转换为列表
  2. 将列表分解为新行
  3. 使用 pd.merge 与 A 合并回来
B['x_set'] = B['x_set'].apply(lambda x: x.split(','))
B = B.explode('x_set')

A.merge(B, left_on=['id','x'], right_on=['id','x_set'])

Out[11]:
id x x_set detail
0 1 a a x
1 2 b b n
2 3 c c j

如果pandas<0.25 :

  1. 将值转换为列表
  2. 获取 x 的展平列表
  3. 使用新列表创建新数据框
  4. 通过 iddetail使用pd.Series.repeat
  5. 与 A 合并(我们可以在此处使用相同的键)
B['x_set'] = B['x_set'].apply(lambda x: x.split(','))

len_set = B['x_set'].apply(len).values

values = B['x_set'].values.flatten().tolist()
flat_results = [item for sublist in values for item in sublist]

new_B = pd.DataFrame(flat_results, columns=['x'])

new_B['id'] = B['id'].repeat(len_set).values
new_B['detail'] = B['detail'].repeat(len_set).values

A.merge(new_B, on=['id','x'])
Out[32]:
id x detail
0 1 a x
1 2 b n
2 3 c j

关于python - pandas 在一个键和另一列内的一列值上进行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210715/

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