跨多个工作表/数据框的熊猫中具有相同标题的多列

时间:2019-07-04 01:52:49

标签: python pandas

我有一本这样的工作簿,所有工作表看起来都一样。在我的实际数据中,每张纸上的重复尺寸彩色材料每次进行五次迭代。

name        size    color   material        size    color   material    size    color   material
bob         m       red     coton           m       yellow  cotton      m       green   dri-fit
james       l       green   dri-fit         l       green   cotton      l       red     cotton

在excel中,我已将各列(减去名称)取为一整页,只有三列。将所有工作表复制并粘贴到一张纸上。它需要永远。这样,我可以将其格式化为表格并筛选出总计。

我需要一种方法来统计每种衣服有多少件特定的衬衫。 34件红色的M棉衬衫,50件小...等等

我个人没有想到在熊猫中实现此目标的方法-但我相当有信心实现这一目标的方法。任何人都想让我知道在Pandas中解决此问题的方案是什么样的?

2 个答案:

答案 0 :(得分:0)

IIUC,

您需要set_indexname列。 Groupby每连续3列。最后,在所有组上pd.concat,在reset_index

num_group = 3 
df = df.set_index('name')
gp = df.groupby(np.arange(df.shape[1]) // num_group, axis=1)
pd.concat([g for _, g in gp]).reset_index()

Out[2270]:
    name size   color material
0    bob    m     red    coton
1  james    l   green  dri-fit
2    bob    m  yellow   cotton
3  james    l   green   cotton
4    bob    m   green  dri-fit
5  james    l     red   cotton

正如您所说,您的真实数据重复了5组,因此将num_group = 5设置为与真实数据一起运行。

答案 1 :(得分:0)

我们可以使用wide_to_long

s=df.columns.to_series()
df.columns=df.columns+s.groupby(s).cumcount().astype(str)
pd.wide_to_long(df,['size','color','material'],i='name0',j='drop')
Out[225]: 
           size   color material
name0 drop                      
bob   0       m     red    coton
james 0       l   green  dri-fit
bob   1       m  yellow   cotton
james 1       l   green   cotton
bob   2       m   green  dri-fit
james 2       l     red   cotton