[英]Update column of a dataframe when key matches from another dataframe in pandas
[英]Pandas update and add rows one dataframe with key column in another dataframe
我有 2 个具有相同列的数据框。 列“键”将具有唯一值。
数据框 1:-
A B key C
0 1 k1 2
1 2 k2 3
2 3 k3 5
数据框 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。
最终 Output Dataframe 就像这样,具有相同的列。
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' 没有任何后缀。
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
看起来您正在寻找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
尝试这个:
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)
首先,您需要指示索引列:
df1.set_index('key', inplace=True)
df2.set_index('key', inplace=True)
然后,合并数据帧以获取所有索引键(这不会更新 df1 值:请参阅: combine_first 手册):
df1 = df1.combine_first(df2)
最后一步是用 df2 更新 df1 中的值并重置索引
df1.update(df2)
df1.reset_index(inplace=True)
尝试追加和删除重复项:
df3 = pd.drop_duplicates(df1.append(df2))
假设两个数据帧具有相同的索引列
df3 = df1.combine_first(df2)
df3.update(df2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.