【问题标题】:Merge on many variables on python合并python上的许多变量
【发布时间】:2016-07-20 05:29:39
【问题描述】:

我有一个这样的df

 id_1    id_2    id_3   id_4 etc. 
 001     002     003     004 

我还有另一个dfdf_referential,我可以找到 id 和他的匹配项之间的匹配项。

df_referential是这样的:

 id    Name    
 001    "Parents"    
002    " Child"    
003    "Music"
etc.

我想要那个表格上的df

id_1    Name_1    id_2   Name_2   id_3    Name_3   etc.
001    "Parents"  002    "Child"   003    Music

我试试这个代码:

for x in range(1,len(df.columns)):
    test_join_{0}.format(x)= pd.merge(pd.DataFrame(df.id_{0}.format(x)),df_referential, left_on='id{0}.format(x)',right_on='id')

但它不起作用。

你知道如何合并多列吗?

感谢

【问题讨论】:

  • 你在使用 Pandas 吗?如果是这样,那么在问题中提及这一点很重要。
  • 看起来您正在使用 Pandas。如果是这样,您确实需要将该标签添加到您的问题中。
  • 对不起,我正在使用 Pandas。

标签: python loops join pandas merge


【解决方案1】:
for i in range(len(df.columns)):
    col = df.columns[i]
    df = df.merge(df_referential, left_on = col, right_on = 'id', how='left', suffixes = ['', '_%s'%i])

【讨论】:

  • Thks Sam,您的代码几乎是我想要的,但是新的 df 只包含 4 行而不是 16 000 行。我不明白这怎么可能。
  • 对不起,我认为可以通过在合并语句中添加“how = 'left'”来解决问题,这样它就可以将所有记录保留在 df 中,并且只保留在 df_referential 中匹配的记录跨度>
  • 非常感谢 SAM,它正在工作。你知道如何只保留 names_1 ... names_n 吗?
  • 尝试类似 for col in df.columns: if col.find('id')>-1: df.drop(col, axis=1, inplace = True)
  • 或者你可以这样做:df[[col for col in df.columns if col.find('name')>-1]]
猜你喜欢
  • 2021-12-01
  • 2022-01-24
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多