gpt4 book ai didi

python - 在合并期间仅向第一个组合添加值

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

我有两个dfs :

df_1

date            id          value
2021-01-01 A1 100
2021-01-01 A1 200
2021-01-01 A1 300
2021-01-02 A1 100
2021-01-02 A1 200
2021-01-03 A1 500
2021-01-03 A1 800

df_2

date            id          value_to_add
2021-01-01 A1 150
2021-01-03 A1 350

我正在尝试维护 df_1 的结构并添加 value_to_add在合并过程中第一次出现时,填充后的最终结果将如下所示 NaN以及除第一个值外的所有值 0 :

date            id          value       value_to_add
2021-01-01 A1 100 150
2021-01-01 A1 200 0 # 0 because the 150 have been already added
2021-01-01 A1 300 0
2021-01-02 A1 100 0 # 0 because value_to_add does not exist
2021-01-02 A1 200 0
2021-01-03 A1 500 350
2021-01-03 A1 800 0 # 0 because the 350 have been already added

我的第一个想法是删除 ['date', 'id'] 的重复项子集,然后合并df_2但随后我不确定如何回到 df_1 的原始结构.

所以问题如下 - 能够在 pd.merge 期间第一次出现键时进行合并操作。。我无法找到有关此主题的任何内容,坦率地说,我不确定如何实现这一目标。

最佳答案

您可以通过 DataFrame.duplicated 过滤重复值带有反转掩模和 Index.union为了避免删除从 merge 添加的新列:

df_1.loc[~df_1.duplicated(['date', 'id']),
df_1.columns.union(df_2.columns)] = df_1.merge(df_2, how='left')
df_1 = df_1.fillna(0)
print (df_1)
date id value value_to_add
0 2021-01-01 A1 100 150.0
1 2021-01-01 A1 200 0.0
2 2021-01-01 A1 300 0.0
3 2021-01-02 A1 100 0.0
4 2021-01-02 A1 200 0.0
5 2021-01-03 A1 500 350.0
6 2021-01-03 A1 800 0.0

使用辅助计数器列的另一个想法:

df_1 = df_1.assign(g = df_1.groupby(['date', 'id']).cumcount()).merge(df_2.assign(g=0), how='left')
df_1 = df_1.drop('g', 1).fillna(0)
print (df_1)
date id value value_to_add
0 2021-01-01 A1 100 150.0
1 2021-01-01 A1 200 0.0
2 2021-01-01 A1 300 0.0
3 2021-01-02 A1 100 0.0
4 2021-01-02 A1 200 0.0
5 2021-01-03 A1 500 350.0
6 2021-01-03 A1 800 0.0

关于python - 在合并期间仅向第一个组合添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71938293/

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