gpt4 book ai didi

python - 如何针对每个名称附加先前不在数据帧 1 中但在数据帧 2 中的键

转载 作者:行者123 更新时间:2023-12-02 19:19:50 25 4
gpt4 key购买 nike

我有一个像这样的数据框 df1

    id  name  day  marks  mean_marks  
0 1 John Wed 28 28
1 1 John Fri 30 30
2 2 Alex Fri 40 50
3 2 Alex Fri 60 50

另一个数据帧 df2 为:

    day  we
0 Mon 29
1 Wed 21
2 Fri 31

现在当我这样做时:

z = pd.merge(df1, df2, how='outer', on=['day']).fillna(0)

我得到:

    id  name  day  marks  mean_marks    we
0 1.0 John Wed 28.0 28.0 21
1 1.0 John Fri 30.0 30.0 31
2 2.0 Alex Fri 40.0 50.0 31
3 2.0 Alex Fri 60.0 50.0 31
4 0.0 0 Mon 0.0 0.0 29

但我想要的东西看起来像:

    id  name  day  marks  mean_marks    we
0 1.0 John Wed 28.0 28.0 21
1 1.0 John Mon 0.0 0.0 29
2 1.0 John Fri 30.0 30.0 31
3 2.0 Alex Mon 0.0 0.0 29
4 2.0 Alex Wed 0.0 0.0 21
5 2.0 Alex Fri 40.0 50.0 31
6 2.0 Alex Fri 60.0 50.0 31

即之前不在 df1 中但在 df2 中的“day”应附加到每个名称的 day 后面。有人可以帮我解决这个问题吗?

最佳答案

您可能需要交叉联接来创建每个 id 和 name 的所有天数组合,然后合并应该可以工作:

u = df1[['id','name']].drop_duplicates().assign(k=1).merge(df2.assign(k=1),on='k')
out = df1.merge(u.drop('k',1),on=['day','name','id'],how='outer').fillna(0)

print(out.sort_values(['id','name']))

id name day marks mean_marks we
0 1 John Wed 28.0 28.0 21
1 1 John Fri 30.0 30.0 31
4 1 John Mon 0.0 0.0 29
2 2 Alex Fri 40.0 50.0 31
3 2 Alex Fri 60.0 5.0 31
5 2 Alex Mon 0.0 0.0 29
6 2 Alex Wed 0.0 0.0 21

关于python - 如何针对每个名称附加先前不在数据帧 1 中但在数据帧 2 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63213932/

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