首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas在一个dataframe中更新和添加行,并在另一个dataframe中使用键列添加行。

Pandas在一个dataframe中更新和添加行,并在另一个dataframe中使用键列添加行。
EN

Stack Overflow用户
提问于 2017-12-16 18:09:08
回答 4查看 2.8K关注 0票数 5

我有2个具有相同列的数据帧。列'key‘将有唯一的值。

数据帧1:-

代码语言:javascript
复制
A B key C    
0 1 k1  2    
1 2 k2  3    
2 3 k3  5

数据帧2:-

代码语言:javascript
复制
A B key C    
4 5 k1  2    
1 2 k2  3
2 3 k4  5

如果Dataframe -2中的键与Dataframe-1匹配,我希望用Dataframe -2中的值更新Dataframe -1中的行。另外,如果key是新的,则将整个行从Dataframe-2添加到Dataframe-1。

最终输出Dataframe如下所示,具有相同的列。

代码语言:javascript
复制
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','Key','C‘在合并后没有任何后缀。

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-16 20:45:11

看起来你在找combine_first

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2017-12-16 19:33:44

试试这个:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2017-12-16 18:29:10

尝试追加和删除重复项:

代码语言:javascript
复制
df3 = pd.drop_duplicates(df1.append(df2))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47844529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档