【Python】【pandas】合并两个dataframe:df1和df2,保留df1和df2的所有列,按照df2的列排序在前,df1中未包含在df2的列在后

合并df1df2时保留df1df2的所有列,并且按照df2的列顺序排序,可以按照以下步骤进行操作:

import pandas as pd

# 示例数据
data1 = {'F': [1, 2, 3],
         'A': [1, 2, 3],
         'B': [4, 5, 6],
         'E': [4, 5, 6]}
df1 = pd.DataFrame(data1)

data2 = {'C': [7, 8, 9],
         'A': [10, 11, 12],
         'B': [13, 14, 15],
         'D': [16, 17, 18]}
df2 = pd.DataFrame(data2)

# 获取目标列顺序
columns_order = list(df2.columns) + list(df1.columns)
columns_order = [x for i, x in enumerate(columns_order) if x not in columns_order[:i]]

# 合并df1和df2
merged_df = pd.concat([df1, df2], ignore_index=True)

# 按照df2的列顺序重新排列列
merged_df = merged_df.reindex(columns=columns_order)

print(merged_df)

结果如下:

     C   A   B     D    F    E
0  NaN   1   4   NaN  1.0  4.0
1  NaN   2   5   NaN  2.0  5.0
2  NaN   3   6   NaN  3.0  6.0
3  7.0  10  13  16.0  NaN  NaN
4  8.0  11  14  17.0  NaN  NaN
5  9.0  12  15  18.0  NaN  NaN

通过以上步骤,我们成功按照df2的列顺序合并了df1df2,并保留了两个DataFrame的所有列,包括B列。在合并后的结果中,df1的列保留了原始的顺序,而df2的列按照df2的顺序进行了排序。缺失的部分用NaN进行填充。

灵感来自:

要删除列表中重复的元素,只保留先出现的元素,可以使用列表推导式和集合(Set)来实现。以下是示例代码:

original_list = [1, 2, 3, 2, 4, 1, 5, 3]

# 使用列表推导式和集合来删除重复元素,只保留先出现的
unique_list = [x for i, x in enumerate(original_list) if x not in original_list[:i]]

print(unique_list)

输出结果为:

[1, 2, 3, 4, 5]

在这个例子中,我们使用列表推导式和集合来删除重复元素。在列表推导式中,我们遍历原始列表original_list,并使用切片original_list[:i]来获取当前元素之前的子列表。然后,使用条件x not in original_list[:i]来判断当前元素是否在子列表中出现过。如果没有出现过,则将该元素添加到新的列表unique_list中。通过这种方式,我们可以只保留先出现的元素,并删除重复的元素。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想要实现这个功能,您可以使用 Pandas 库来读取和处理表格数据。 首先,您可以使用 Pandas 的 read_excel 函数读取 df1df2,例如: ```python import pandas as pd df1 = pd.read_excel('df1.xlsx') df2 = pd.read_excel('df2.xlsx') ``` 然后,您可以使用 Pandasmerge 函数将 df1df2 合并,指定主键为需要对比的,例如: ```python merged_df = pd.merge(df1, df2, on='column_name', how='left') ``` 其中,column_name 是需要对比的的名称,how 参数指定合并方式为“左连接”,表示以 df1 为主,将 df2 中与 df1 匹配的行合并df1 中。 接着,您可以使用 Pandas 的 drop 函数删除 df2df1 没有的数据,例如: ```python filtered_df2 = merged_df.dropna(subset=['column_name_from_df2']) ``` 其中,column_name_from_df2df2 中需要删除的的名称,使用 dropna 函数删除该为空的行。 然后,您可以使用 Pandas 的 concat 函数将 df1 中与 df2 不同的数据合并到 filtered_df2 中,例如: ```python diff_df = pd.concat([df1, filtered_df2]).drop_duplicates(keep=False) result_df = pd.concat([filtered_df2, diff_df]) ``` 其中,diff_df 是 df1 和 filtered_df2 不同的数据,使用 concat 函数将其合并,drop_duplicates 函数删除重复的行;result_df 是最终结果,使用 concat 函数将 filtered_df2 和 diff_df 合并。 最后,您可以使用 Pandas 的 to_excel 函数将处理后的数据保存到新的 Excel 文件中,例如: ```python result_df.to_excel('result_df.xlsx', index=False) ``` 其中,index 参数为 False 表示不保存行索引。 希望这些代码可以帮助您实现您的要求!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值