将 n 个数据帧中的 Concatenate/Merge 个同名列动态添加到新数据帧中

Dynamically Concatenate/Merge Columns of Same Name from n Data Frames Into New Data Frame

我在一个列表中有 17 个数据框 dataframes,它们都具有相同的列名和长度,除了描述数据源的第一列。有 7 列描述了数据的日期,对于每一行的每个数据框来说也是相同的。因此,每个数据框共有 19 列。我想做的是动态连接具有相同列名的每一列,这样共有 11 个数据框,其中 24 列,其中 7 列描述日期,另外 17 列是共享相同的连接列17 个数据框列表的列名。

下面只是 3 个数据框和预期结果的示例。

df1 = pd.DataFrame(np.array([
['a', 1, 3, 9],
['a', 2, 4, 61],
['a', 3, 24, 9]]),
columns=['name', 'date','attr11', 'attr12'])

df2 = pd.DataFrame(np.array([
['b', 1, 5, 19],
['b', 2, 14, 16],
['b', 3, 4, 9]]),
columns=['name','date', 'attr11', 'attr12'])

df3 = pd.DataFrame(np.array([
['c', 1, 3, 49],
['c', 2, 4, 36],
['c', 3, 14, 9]]),
columns=['name','date' ,'attr11', 'attr12']

结果

dfattr11 
[1, 3, 5, 49],
[2, 4, 14, 36],
[3, 24, 4, 9]]),
columns=['date', 'attr11', 'attr11', 'attr11']

dfattr12...

new_dataframes = [dfattr11, dfattr12, ...]

我尝试使用 作为指导,但似乎该解决方案堆叠了与平行相反的列。

我知道我将如何使用 concat 创建一个新的数据框,但是当尝试以迭代方式或动态方式执行此操作时,挑战就出现了,因为有 17 个数据框,每个数据框有 11 列,需要放入它们单独的 df 中。任何帮助将不胜感激。

IIUC,你可以使用 pandas.concat 生成一个包含所有数据的大数据帧并使用 groupby 拆分它。您将获得一个数据框字典作为输出:

dfs = [df1,df2,df3]

out = {k: d.droplevel(0, axis=1) for k,d in
 pd.concat({d['name'].iloc[0]: d.set_index('date')
                                .drop(columns='name')
            for d in dfs}, axis=1)
   .groupby(level=1, axis=1)
}

输出:

{'attr11':      attr11 attr11 attr11
 date                     
 1         3      5      3
 2         4     14      4
 3        24      4     14,
 'attr12':      attr12 attr12 attr12
 date                     
 1         9     19     49
 2        61     16     36
 3         9      9      9}