Pandas在一个 Dataframe 中更新和添加行,并在另一个 Dataframe 中添加关键列

zvokhttg  于 2023-03-06  发布在  其他
关注(0)|答案(6)|浏览(200)

我有2个相同列的数据框。列“键”将有唯一的值。
Dataframe 1:-

A B key C    
0 1 k1  2    
1 2 k2  3    
2 3 k3  5

Dataframe 2:-

A B key C    
4 5 k1  2    
1 2 k2  3
2 3 k4  5

如果Dataframe -2中的键与Dataframe -1匹配,我想用Dataframe -2中的值更新Dataframe-1中的行。此外,如果键是新的,则将Dataframe-2中的整行添加到Dataframe-1。
最终输出数据框与此类似,具有相同的列。

A B key C
4 5 k1  2   --> update
1 2 k2  3   --> no changes
2 3 k3  5   --> no changes
2 3 k4  5   --> new row

我已经尝试了下面的代码。我只需要4列'A','B','键','C'没有任何后缀合并后。

df3 = df1.merge(df2,on='key',how='outer')
>>> df3
   A_x  B_x key  C_x  A_y  B_y  C_y
0  0.0  1.0  k1  2.0  4.0  5.0  2.0
1  1.0  2.0  k2  3.0  1.0  2.0  3.0
2  2.0  3.0  k3  5.0  NaN  NaN  NaN
3  NaN  NaN  k4  NaN  2.0  3.0  5.0
vql8enpb

vql8enpb1#

看起来你要找的是combine_first

a = df2.set_index('key')
b = df1.set_index('key')

(a.combine_first(b)
  .reset_index()
  .reindex(columns=df1.columns))

     A    B key    C
0  4.0  5.0  k1  2.0
1  1.0  2.0  k2  3.0
2  2.0  3.0  k3  5.0
3  2.0  3.0  k4  5.0
3lxsmp7m

3lxsmp7m2#

试试这个:

df1 = {'key': ['k1', 'k2', 'k3'], 'A':[0,1,2], 'B': [1,2,3], 'C':[2,3,5]}
df1 = pd.DataFrame(data=df1)
print (df1)
df2 = {'key': ['k1', 'k2', 'k4'], 'A':[4,1,2], 'B': [5,2,3], 'C':[2,3,5]}
df2 = pd.DataFrame(data=df2)
print (df2)
df3 = df1.append(df2)
df3.drop_duplicates(subset=['key'], keep='last', inplace=True)
df3 = df3.sort_values(by=['key'], ascending=True)
print (df3)
kr98yfug

kr98yfug3#

首先,您需要指定索引列:

df1.set_index('key', inplace=True)
df2.set_index('key', inplace=True)

然后,组合 Dataframe ,使所有索引键就位(这不会更新df1值!请参见:combine_first manual):

df1 = df1.combine_first(df2)

最后一步是使用df2更新df1中的值并重置索引

df1.update(df2)
df1.reset_index(inplace=True)
zf2sa74q

zf2sa74q4#

尝试附加和删除重复项:

df3 = pd.drop_duplicates(df1.append(df2))
5fjcxozz

5fjcxozz5#

假设两个 Dataframe 具有相同的索引列

df3 = df1.combine_first(df2)
df3.update(df2)
iqjalb3h

iqjalb3h6#

在每个 Dataframe 上将同一列设置为索引后:

def df_upsert(df1, df2):
    df = df1.combine_first(df2)
    df.update(df2)
    return df

相关问题