【发布时间】:2020-01-21 02:05:55
【问题描述】:
目前正在合并两个数据帧,其中两个数据帧的某些列相同但不是全部。
df = pd.merge(df_1, df_2, how='inner', on='name' )
这会返回:
index name val1_x val2_x val1_y val2_y
0 name1 1 2 1 3
2 name2 12 14 12 34
3 name3 14 3 14 96
但我想:
index name val1_x val2_x val2_y
0 name1 1 2 3
2 name2 12 14 34
3 name3 14 3 96
你怎么会得到这个结果?使用合并命令还是之后?
------ 扩展--外合并-------------
内部合并
df = pd.merge(df_1, df_2, how='name', on='address').T.drop_duplicates().T
按照解决方案中的建议工作
但是有一个外部合并
df = pd.merge(df_1, df_2, how='outer', on='name' )
它不起作用,因为有 nan 值。它返回
index name val1_x val2_x val1_y val2_y
0 name1 1 2 nan 3
2 name2 12 14 12 34
3 name3 14 3 14 96
但我想:
index name val1_x val2_x val2_y
0 name1 1 2 3
2 name2 12 14 34
3 name3 14 3 96
如何做到这一点?
【问题讨论】:
-
df = pd.merge(df_1, df_2, how='inner', on='name' ).drop(columns = 'val1_y')? -
合并前的列过滤怎么样?
df_1.merge(df_2[['name','val2']], how='outer', on='name') -
@ScottBoston 真实数据有 50 列不想对它进行硬编码
-
如果
val1与val2相同,您是否也会删除重复项?或者您是否想要内部合并,仅在两个 df-s 中保留相同名称的列,如果它们不同,并且如果它们相同,则保留一个?您还可以发布您的起始数据,即df_1和df_2?