在 pandas 中转置几列(不是整个数据框)(与 get_dummies 相反)
transpose of few columns (not whole data frame) in pandas (opposite of 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
相反的,但是至今没找到解决方法
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
我需要转置几列(不是整个数据框)。
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
相反的,但是至今没找到解决方法
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