panda中少数列(而不是整个数据帧)的转置(与get_dummies相反)



我需要对少数列(而不是整个数据帧(进行转置。

Keywords     IX_Brand1      IX_Brand2     IX_Brand3     LS_Brand1      LS_Brand2      LS_Brand3
Glass        2               5                          120            78             100
Wood         10              25            10           400            700            250

所需输出如下:

Keywords     Brands        IX       LS
Glass        Brand1        2        120
Glass        Brand2        5        78
Glass        Brand3        NaN      100
Wood
.
.
.        

它应该与get_dummies相反,但到目前为止还没有找到解决方案。

使用pd.wide_to_long:

df1 = (
pd.wide_to_long(
df, i='Keywords', j='Brands', stubnames=['IX', 'LS'], sep='_', suffix='w+')
.sort_values('Keywords').reset_index()
)

结果:

print(df1)
Keywords  Brands    IX   LS
0    Glass  Brand1   2.0  120
1    Glass  Brand2   5.0   78
2    Glass  Brand3   NaN  100
3     Wood  Brand1  10.0  400
4     Wood  Brand2  25.0  700
5     Wood  Brand3  10.0  250

你可以做:

df = df.set_index(['Keywords'])
df.columns = df.columns.str.split("_", expand=True)
df.stack(level=1).reset_index()
Keywords    level_1 IX  LS
0   Glass   Brand1  2   78.0
1   Glass   Brand2  5   100.0
2   Glass   Brand3  120 NaN
3   Wood    Brand1  10  400.0
4   Wood    Brand2  25  700.0
5   Wood    Brand3  10  250.0

最新更新