【问题标题】:Data frame Merge in a specific format数据框以特定格式合并
【发布时间】:2021-09-01 07:32:14
【问题描述】:

我有两个数据框,我可以合并它。但我想以特定格式(按列)​​合并它,下面是更多详细信息

>df1

  id        A        B       C
0  1        20       0       1
1  2        23       1       2


>df2

  id        A        B       C
0  1        10       1       1
1  2        20       1       1

下面是我的代码和输出

df = pd.merge(df1,df2,on='id',suffixes=('_Pre', '_Post'))

这个输出是:

  id       A_Pre    B_Pre   C_Pre   A_Post   B_Post  C_Post
0  1        20       0       1      10       1       1
1  2        23       1       2      20       1       1

但预期的输出应该是,有人可以帮助或指导我吗:

  id       A_Pre    A_Post   B_Pre   B_Post   C_Pre  C_Post
0  1        20       10       0       1       1       1
1  2        23       20       1       1       2       1

【问题讨论】:

  • sort_index(axis='columns')
  • @ifly6 注意PrePost"o" < "r"

标签: python python-3.x pandas dataframe python-2.7


【解决方案1】:

如果可以进行后续操作,您可以执行以下操作:

df[np.array([[x+"_Pre", x+"_Post"] for x in df1.columns.drop("id")]).flatten()]

【讨论】:

  • 这行得通,但删除了 id 列,所以我使用了 sort_index(axis='columns')
【解决方案2】:

如果您只想修改列的顺序,可以使用 reindex :

df = df.reindex(columns=['A_Pre','A_Post','B_Pre','B_Post','C_Pre','C_Post'])

【讨论】:

    【解决方案3】:

    您可以使用 sorted 对新数据集中的列进行排序,并在第二条语句中添加列“id”

    order_col = sorted(df.columns[1:], key=lambda x:x[:3])  
    df_final = pd.concat([df['id'],df[order_col]], axis=1)
    

    【讨论】:

    • 答案应该是概括的,因为这不是一个特定的问题。有很多更好、更简单的方法可用。
    猜你喜欢
    • 2020-12-14
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2016-11-14
    • 2021-10-20
    相关资源
    最近更新 更多