【问题标题】:pandas dataframe: error joining熊猫数据框:错误加入
【发布时间】:2016-07-07 09:57:10
【问题描述】:

我有这两个数据框:

1) df
STATCODE    OCCDATE     COWNNUM     AGNTNUM
IF          20130725    50033901    61002624
IF          20130725    50033901    61002624
IF          20130725    50033901    61002624
IF          20130725    50033901    61002624

2) dfCus
CLNTNUM     CLTTYPE     CLTSEX
50033901    P           M
50033901    P           M
50055927    P           F

我运行此代码以创建具有标准命名的列,并且我想加入该列上的数据框。

df.index.names = ['ID']
dfCus.index.names = ['ID']
df['CLNTNUM'] = df.index
dfCus['CLNTNUM'] = dfCus.index
data = df.join(dfCus, how='inner', on='CLNTNUM')

但我收到此错误:

ERROR:
ValueError: columns overlap but no suffix specified: Index([u'CLNTNUM'], dtype='object')

你能帮我理解什么是错的吗? 谢谢 交流

【问题讨论】:

  • join 要求您在值冲突时指定 lhs 和 rhs 后缀,在这种情况下最好使用 df.merge(dfCus, left_index=True, right_index=True)

标签: python pandas join dataframe


【解决方案1】:

我觉得你需要merge,参数how='inner'是默认的,所以可以省略:

data = df.merge(dfCus, left_index=True, right_index=True)

而且这段代码可以省略:

df.index.names = ['ID']
dfCus.index.names = ['ID']
df['CLNTNUM'] = df.index
dfCus['CLNTNUM'] = dfCus.index

编辑1:

通过示例,您似乎需要在 df 中的 COWNNUM 和 dfCus 中的 CLNTNUM 上加入列 - 但您有重复的值,所以输出是:

print (df)
  STATCODE   OCCDATE   COWNNUM   AGNTNUM
0       IF  20130725  50033901  61002624
1       IF  20130725  50033901  61002624
2       IF  20130725  50033901  61002624
3       IF  20130725  50033901  61002624

print (dfCus)
    CLNTNUM CLTTYPE CLTSEX
0  50033901       P      M
1  50033901       P      M
2  50055927       P      F

df = df.merge(dfCus, left_on='COWNNUM', right_on='CLNTNUM')
print (df)
  STATCODE   OCCDATE   COWNNUM   AGNTNUM   CLNTNUM CLTTYPE CLTSEX
0       IF  20130725  50033901  61002624  50033901       P      M
1       IF  20130725  50033901  61002624  50033901       P      M
2       IF  20130725  50033901  61002624  50033901       P      M
3       IF  20130725  50033901  61002624  50033901       P      M
4       IF  20130725  50033901  61002624  50033901       P      M
5       IF  20130725  50033901  61002624  50033901       P      M
6       IF  20130725  50033901  61002624  50033901       P      M
7       IF  20130725  50033901  61002624  50033901       P      M

【讨论】:

    【解决方案2】:

    找到解决方案,即使用lsuffix:

    data = df.join(dfCus, how='inner', on='CLNTNUM',lsuffix='_l')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2017-06-13
      • 1970-01-01
      相关资源
      最近更新 更多