【发布时间】:2021-02-18 03:32:39
【问题描述】:
我在必须与另一个合并的数据框的公共列中有重复值。 如何在不复制且不添加其他数据框中的列的情况下加入它们?
df_1:
df_2:
由于两个数据框中的列列表相同,如何将这两个数据框合并为一个数据框而不重复列?
预期的最终数据帧:
【问题讨论】:
标签: python python-3.x pandas dataframe
我在必须与另一个合并的数据框的公共列中有重复值。 如何在不复制且不添加其他数据框中的列的情况下加入它们?
df_1:
df_2:
由于两个数据框中的列列表相同,如何将这两个数据框合并为一个数据框而不重复列?
预期的最终数据帧:
【问题讨论】:
标签: python python-3.x pandas dataframe
pandas.merge 将创建额外的列,因为它只是一个连接函数。您可以尝试使用 [combine_first][1] 将 df_1 与 df_2 更新为您的要求。这将匹配您的索引并替换其他数据框中的空值。
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
【讨论】:
创建第一个数据框:
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
【讨论】: