我在一个数据框的公共列中有重复的值,必须与另一个合并。 如何在不重复且不添加其他数据帧中的列的情况下将它们都加入?
df_1:
df_2:
如何将这两个数据帧合并到一个没有重复列的数据帧中,因为两个数据帧中的列列表相同?
预期的最终数据帧:
答案 0 :(得分:0)
创建第一个数据框:
import pandas as pd
df_1 = pd.DataFrame({'Value_1': [25, 22, None, None, 10, 15],
'Value_2': [34, 18, None, None, 0, 12],
'Value_3': [58, 65, None, None, 18, 32]}
, index = ['A1', 'B1', 'C1', 'C1', 'C2', 'D1'])
print(df_1)
输出:
Value_1 Value_2 Value_3
A1 25.0 34.0 58.0
B1 22.0 18.0 65.0
C1 NaN NaN NaN
C1 NaN NaN NaN
C2 10.0 0.0 18.0
D1 15.0 12.0 32.0
创建第二个数据框:
df_2 = pd.DataFrame({'Value_1': [15, 45],
'Value_2': [22, 198],
'Value_3': [36, 265]}
, index = ['C1', 'C1'])
print(df_2)
输出:
Value_1 Value_2 Value_3
C1 15 22 36
C1 45 198 265
您可以将df_1与df_2中的新行连接。然后使用df_2中的值更新值。
df = pd.concat([df_1[~df_1.index.isin(df_2.index)], df_2])
print(df)
输出:
Value_1 Value_2 Value_3
A1 25.0 34.0 58.0
B1 22.0 18.0 65.0
C2 10.0 0.0 18.0
D1 15.0 12.0 32.0
C1 15.0 22.0 36.0
C1 45.0 198.0 265.0
答案 1 :(得分:0)
pandas.merge
将创建额外的列,因为它只是一个连接函数。您可以根据需要使用[combine_first][1]
用df_2更新df_1。这将与您的索引匹配,并替换其他数据框中的空值。
df_1
Id Value_1 Value_2 Value_3
0 A1 25.0 34.0 58.0
1 B1 22.0 18.0 65.0
2 C1 NaN NaN NaN
3 C1 NaN NaN NaN
4 C2 10.0 0.0 18.0
5 D1 15.0 12.0 32.0
df_2
Id Value_1 Value_2 Value_3
0 C1 15 22 36
1 C1 45 198 265
Updated_df = (df_1.set_index('Id').combine_first(df_2.set_index('Id')).reset_index().reindex(columns=df_1.columns)).drop_duplicates()
Updated_df
Id Value_1 Value_2 Value_3
0 A1 25.0 34.0 58.0
1 B1 22.0 18.0 65.0
2 C1 15.0 22.0 36.0
3 C1 45.0 198.0 265.0
6 C2 10.0 0.0 18.0
7 D1 15.0 12.0 32.0