如果 pandas 中没有其他唯一列,如何将多个列转换为单独的 rows/values?
How do I convert multiple columns to individual rows/values if there is no other unique column in pandas?
例子如下
2019 年 Q01 利率、数值
2019 年 2 季度的利率、价值
2019 年第 3 季度利率、数值
2019 年第四季度利率、数值
2019 年 Q01 销售额,数值
2019 年 Q02 销售额,数值
2019 年 Q03 销售额,数值
2019 年第四季度销售额,价值
100
150
200
300
400
450
500
600
结果应该是
期间
费率、价值
销售额,价值
2019Q01
100
400
2019Q02
150
450
2019Q03
200
500
2019Q04
300
600
我试过 melt 和 wide_to_long,但无法得到结果。谢谢
尝试通过 columns
属性然后 stack()
:
df.columns=df.columns.str.replace('values','').str.split(', ',expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').add_suffix(', values').reset_index()
或按照 @Cytorak
的建议
df.columns = df.columns.str.rsplit(' ', 1, expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').reset_index()
df
的输出:
Period Rates, values Sales, values
0 2019Q01 100 400
1 2019Q02 150 450
2 2019Q03 200 500
3 2019Q04 300 600
例子如下
2019 年 Q01 利率、数值 | 2019 年 2 季度的利率、价值 | 2019 年第 3 季度利率、数值 | 2019 年第四季度利率、数值 | 2019 年 Q01 销售额,数值 | 2019 年 Q02 销售额,数值 | 2019 年 Q03 销售额,数值 | 2019 年第四季度销售额,价值 |
---|---|---|---|---|---|---|---|
100 | 150 | 200 | 300 | 400 | 450 | 500 | 600 |
结果应该是
期间 | 费率、价值 | 销售额,价值 |
---|---|---|
2019Q01 | 100 | 400 |
2019Q02 | 150 | 450 |
2019Q03 | 200 | 500 |
2019Q04 | 300 | 600 |
我试过 melt 和 wide_to_long,但无法得到结果。谢谢
尝试通过 columns
属性然后 stack()
:
df.columns=df.columns.str.replace('values','').str.split(', ',expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').add_suffix(', values').reset_index()
或按照 @Cytorak
df.columns = df.columns.str.rsplit(' ', 1, expand=True)
df=df.stack().droplevel(0).rename_axis(index='Period').reset_index()
df
的输出:
Period Rates, values Sales, values
0 2019Q01 100 400
1 2019Q02 150 450
2 2019Q03 200 500
3 2019Q04 300 600