合并一个pandas数据帧列表

Jak*_*ake 14 python dataframe pandas

有许多类似的问题,但没有具体到这个问题.

我有一个数据框列表,我需要使用一个唯一的列将它们合并在一起(date).字段名称不同,因此concat已经出局.

我可以手动使用df[0].merge(df[1],on='Date').merge(df[3],on='Date)等由一个合并的每个DF之一,但问题是,数据帧中的列表中的号码与用户输入不同.

有没有什么方法可以合并,只是一次性组合列表中的所有数据帧?或者也许有些人会在循环中做到这一点?

我使用的是Python 2.7.

Psi*_*dom 56

您可以使用reduce函数在哪里dfList是您的数据框列表:

import pandas as pd
reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList)
Run Code Online (Sandbox Code Playgroud)

作为演示:

df = pd.DataFrame({'Date': [1,2,3,4], 'Value': [2,3,3,4]})
dfList = [df, df, df]
dfList

# [   Date  Value
#  0     1      2
#  1     2      3
#  2     3      3
#  3     4      4,    Date  Value
#  0     1      2
#  1     2      3
#  2     3      3
#  3     4      4,    Date  Value
#  0     1      2
#  1     2      3
#  2     3      3
#  3     4      4]

reduce(lambda x, y: pd.merge(x, y, on = 'Date'), dfList)
#   Date  Value_x  Value_y  Value
# 0    1        2        2      2
# 1    2        3        3      3
# 2    3        3        3      3
# 3    4        4        4      4
Run Code Online (Sandbox Code Playgroud)

  • 导入减少:"来自functools import reduce".如果您使用的是python 3+ (26认同)
  • 哇谢谢!我从不真正了解lambda。看起来是时候阅读它了! (2认同)
  • @Maverick `pd.merge` 默认情况下进行内部连接,因此如果列表中所有数据框的 Date 列没有重叠,您将有零行。 (2认同)