仅使用公共列的多个数据帧的pandas.concat

VM1*_*VM1 3 python dataframe pandas

我有多个pandas数据框对象cost1,cost2,cost3 ....

  1. 它们具有不同的列名(和列数),但有一些共同点.
  2. 每个数据帧中的列数相当大,因此手动挑选公共列会很痛苦.

如何将所有这些数据框中的行追加到一个数据框中,同时仅保留公共列名称中的元素?

截至目前我有

帧= [COST1,cost2,COST3 ...]

new_combined = pd.concat(frames,ignore_index = True)

这显然包含在所有数据帧中不常见的列.

Alo*_*yak 15

对于未来的读者,上述功能可以由 Pandas 自己实现。如果您在 pd.concat 中提供 join='inner' 参数,Pandas 可以在仅保留公共列的同时连接数据帧。例如

pd.concat(frames,join='inner', ignore_index=True)
Run Code Online (Sandbox Code Playgroud)


Ami*_*ory 6

你可以在Python中找到常见的列set.intersection:

common_cols = list(set.intersection(*(set(df.columns) for df in frames)))
Run Code Online (Sandbox Code Playgroud)

要仅使用公共列进行连接,可以使用

pd.concat([df[common_cols] for df in frames], ignore_index=True)
Run Code Online (Sandbox Code Playgroud)