我有一本这样的工作簿,所有工作表看起来都一样。在我的实际数据中,每张纸上的重复尺寸彩色材料每次进行五次迭代。
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中解决此问题的方案是什么样的?
答案 0 :(得分:0)
IIUC,
您需要set_index
到name
列。 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