我在列表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}