将n个数据帧中的同名列动态连接/合并到新的数据帧中



我在列表dataframes中有17个数据帧,除了描述数据源的第一列外,它们都有相同的列名和长度。有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, ...]

我尝试使用Pandas Python:将具有相同列的数据帧连接起来作为指导,但解决方案似乎是将列堆叠起来,而不是并行。

我知道我将如何使用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}

最新更新