【问题标题】:Perform inner join using python and re-order original columns使用 python 执行内部连接并重新排序原始列
【发布时间】:2021-03-13 21:25:41
【问题描述】:

我有两个数据集,df1 和 df2,其中:

我想对 datename 列执行“内部连接” 但是,我也希望对某些列重新排序。

df1

name    freeG   totalG  sku      date
a       4       10      hi       10/10/2020
b       10      20      hi       10/10/2020
c       8       10      hello    10/10/2020
d       1       5       hello    10/10/2020
e       1       5       hey      10/10/2020
f       2       5       hey      10/10/2020
g       1       5       hey      10/10/2020

df2

total   freeS   usedS   name   date  
10      5       5       a      10/10/2020
20      10      10      b      10/10/2020
30      5       25      c      10/10/2020
40      10      30      d      10/10/2020
50      10      40      e      10/10/2020
10      5       5       f      10/10/2020
10      5       5       g      10/10/2020

期望的结果

date           name freeG   totalG  sku     usedS   freeS   total  
10/10/2020      a   4       10      hi      5       5       10
10/10/2020      b   10      20      hi      10      10      20
10/10/2020      c   8       10      hello   25      5       30
10/10/2020      d   1       5       hello   30      10      40
10/10/2020      e   1       5       hey     40      10      50
10/10/2020      f   2       5       hey     5       5       10
10/10/2020      g   1       5       hey     5       5       10

这就是我正在做的事情

import pandas as pd
import numpy as np


new = pd.concat([df1, df2], axis=1, join='inner', inner_on=['date','name'])

//改变列的顺序

new1 = new[['date', 'name', 'freeG', 'totalG', 'sku', 'usedS', 'freeS', 'total']]

但是,我无法使用上述语法加入。任何建议表示赞赏

【问题讨论】:

  • “我无法使用上述语法加入”请描述您当前尝试的问题。输出错了吗?有错误吗?详细信息将帮助我们了解如何更好地帮助您
  • 确定 - inner_on = 语法不正确。我正在研究这个
  • 如果你想加入,而不是使用 concat,为什么不使用dataframe.join()
  • 好的,谢谢@G.Anderson - 我会试试这个 - 我相信文档只有一个专栏可以加入。我可以添加多个吗?
  • 也有帮助:Pandas Merging 101

标签: python pandas join merge


【解决方案1】:
new = pd.merge(df1, df2, how='inner',on=['name', 'date'])#merge
new['total']=new.freeS.add(new.usedS)#compute  total

new1 = new[['date', 'name', 'freeG', 'totalG', 'sku', 'usedS', 'freeS', 'total']]   # align columns
new1

【讨论】:

  • 这很有效,谢谢@wwnde - 我不确定加入时使用的正确语法。我正在使用 'inner_on' 。谢谢
  • 哦嗨@Wwnde现在我收到这个错误:SyntaxError:解析时意外EOF - 也许我需要双引号?它指向这部分:on=['name', 'date'])
  • 我想通了-我删除了括号。我刚才只加入了一个专栏。我做了: join= pd.merge(df1, df2 how='inner', on= 'Name') - 也许当您加入多个列时,您使用 []?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多