如何合并两个具有重叠列的数据框,更新现有值并添加新值
How to merge two dataframes with overlapping columns, update existing values and add new values
我想合并两个数据帧并从第二个数据帧更新第一个数据帧中的值。
我需要添加从 data2
到 data1
的所有值,如果 username
已经存在于 data1
中,我需要 amount
值是从 data2
.
更新
import pandas as pd
data1 = pd.DataFrame([['user1', 10], ['user2', 11], ['user3', 12],['user4',10]], columns=['username', 'amount'])
data2 = pd.DataFrame([['user4', 15], ['user5', 60]], columns=['username', 'amount'])
#Desired dataframe:
data3= pd.DataFrame([['user1', 10], ['user2', 11], ['user3', 12],['user4',15], ['user5', 60]],columns=['username', 'amount'])
我想更新两个数据框中存在的 vaues 并添加新行(如果它们不在第一个数据框中):
Dataframes:
data1:
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
data2:
username amount
0 user4 15
1 user5 60
data3: (Desired dataframe)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 15
4 user5 60
我尝试了 Concat、Merge、Update、Join,但无法让它们按照我想要的方式工作。
连接:
print('Concat:')
df_concat = pd.concat([data1, data2], axis=0, join='outer', ignore_index='true', verify_integrity='True')
display(df_concat)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
4 user4 15
5 user5 60
合并:
print('Merge:')
df_merge = data1.merge(data2,how='outer', on='username',indicator = True)
display(df_merge)
username amount_x amount_y _merge
0 user1 10.0 NaN left_only
1 user2 11.0 NaN left_only
2 user3 12.0 NaN left_only
3 user4 10.0 15.0 both
4 user5 NaN 60.0 right_only
更新:
print('Update:')
data1.update(data2)
display(data1)
username amount
0 user4 15.0
1 user5 60.0
2 user3 12.0
3 user4 10.0
加入:
print('Join:')
data1.join(data2, how='outer', lsuffix='username', rsuffix='amount')
display(data1)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
如何从 data1 和 data2 获取所需的数据帧 data3?
您可以使用 concat + drop_duplicates:
data3 = pd.concat([data1, data2]).drop_duplicates(subset=["username"], keep="last")
print(data3)
输出
username amount
0 user1 10
1 user2 11
2 user3 12
0 user4 15
1 user5 60
我想合并两个数据帧并从第二个数据帧更新第一个数据帧中的值。
我需要添加从 data2
到 data1
的所有值,如果 username
已经存在于 data1
中,我需要 amount
值是从 data2
.
import pandas as pd
data1 = pd.DataFrame([['user1', 10], ['user2', 11], ['user3', 12],['user4',10]], columns=['username', 'amount'])
data2 = pd.DataFrame([['user4', 15], ['user5', 60]], columns=['username', 'amount'])
#Desired dataframe:
data3= pd.DataFrame([['user1', 10], ['user2', 11], ['user3', 12],['user4',15], ['user5', 60]],columns=['username', 'amount'])
我想更新两个数据框中存在的 vaues 并添加新行(如果它们不在第一个数据框中):
Dataframes:
data1:
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
data2:
username amount
0 user4 15
1 user5 60
data3: (Desired dataframe)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 15
4 user5 60
我尝试了 Concat、Merge、Update、Join,但无法让它们按照我想要的方式工作。
连接:
print('Concat:')
df_concat = pd.concat([data1, data2], axis=0, join='outer', ignore_index='true', verify_integrity='True')
display(df_concat)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
4 user4 15
5 user5 60
合并:
print('Merge:')
df_merge = data1.merge(data2,how='outer', on='username',indicator = True)
display(df_merge)
username amount_x amount_y _merge
0 user1 10.0 NaN left_only
1 user2 11.0 NaN left_only
2 user3 12.0 NaN left_only
3 user4 10.0 15.0 both
4 user5 NaN 60.0 right_only
更新:
print('Update:')
data1.update(data2)
display(data1)
username amount
0 user4 15.0
1 user5 60.0
2 user3 12.0
3 user4 10.0
加入:
print('Join:')
data1.join(data2, how='outer', lsuffix='username', rsuffix='amount')
display(data1)
username amount
0 user1 10
1 user2 11
2 user3 12
3 user4 10
如何从 data1 和 data2 获取所需的数据帧 data3?
您可以使用 concat + drop_duplicates:
data3 = pd.concat([data1, data2]).drop_duplicates(subset=["username"], keep="last")
print(data3)
输出
username amount
0 user1 10
1 user2 11
2 user3 12
0 user4 15
1 user5 60