【问题标题】:Merging several dataframes into one without creating duplicate columns将多个数据框合并为一个而不创建重复列
【发布时间】:2021-05-20 19:52:52
【问题描述】:

我有三个数据框:

array = {'name': ['Trevor', 'John', 'Trevor', 'John', 'Trevor', 'Trevor', 'John'], 'day': ['2020-10-11 08:00:00', '2020-10-11 08:00:00', '2020-10-11 08:00:00', '2020-10-11 08:00:00', '2020-10-11 08:00:00'
        , '2020-10-11 12:34:00', '2020-10-11 09:12:00'], 'number': [5,0,3,5,1,8,6]}
df = pd.DataFrame(array)
array1 = {'name': ['Trevor'], 'color': ['red']}
df1 = pd.DataFrame(array1)
array2 = {'name': ['John'], 'color': ['blue']}
df2 = pd.DataFrame(array2)
df

我想将 df1 & df2 合并到现实世界中的 df 我有数百个 df1、df2、df3...),所以输出将是:

    name    day              number color
0   Trevor  2020-10-11 08:00:00 5   red
1   John    2020-10-11 08:00:00 0   blue
2   Trevor  2020-10-11 08:00:00 3   red
3   John    2020-10-11 08:00:00 5   blue
4   Trevor  2020-10-11 08:00:00 1   red
5   Trevor  2020-10-11 12:34:00 8   red
6   John    2020-10-11 09:12:00 6   blue

【问题讨论】:

标签: python pandas


【解决方案1】:

看起来像mergeconcat

df.merge(pd.concat([df1,df2]), on='name', how='left')

输出:

     name                  day  number color
0  Trevor  2020-10-11 08:00:00       5   red
1    John  2020-10-11 08:00:00       0  blue
2  Trevor  2020-10-11 08:00:00       3   red
3    John  2020-10-11 08:00:00       5  blue
4  Trevor  2020-10-11 08:00:00       1   red
5  Trevor  2020-10-11 12:34:00       8   red
6    John  2020-10-11 09:12:00       6  blue

更新:每次收到新的df# 时尝试更新loc

df.loc[df['name'].isin(df1['name']), 'color'] = df1['color'].iloc[0]

df.loc[df['name'].isin(df2['name']), 'color'] = df2['color'].iloc[0]

【讨论】:

  • 谢谢,但我有数百个 df# - 不只是两个
  • 如何存储数百个df#?你可以轻松通过列表pd.concat(list_of_dfs_)?
  • 问题是我一次得到一个,需要一次将它们“合并”到 df
  • @gtomer 您应该在问题中提及这一点。如果有帮助,请查看更新的答案。
  • current_df = current_df.merge(pd.concat([current_df, new_df]), ....
【解决方案2】:
pd.merge(df,df1.append(df2), how='left', on='name')

【讨论】:

  • 谢谢,但我有数百个 df# - 不只是两个
  • 将它们解析为一个列表。 Concat 变得更有用了
猜你喜欢
  • 2018-09-04
  • 2016-12-23
  • 2017-03-20
  • 1970-01-01
  • 2012-11-14
  • 2017-11-26
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多