尝试将pandas DataFrames从宽格式转换为长格式。
我已尝试melt()
,使用wide_to_long()
(简单melt()
),但仍然与我收到的语法和输出混淆。
我还阅读了有关此主题的SO和网络上的许多帖子,并尝试了quite some proposed方法,但结果从来都不是我想要的
This post帮助我发现unstack()
- 我终于设法得到了我想要的结果连续两次:df.unstack().unstack()
。
我确定这不是最好的方法,并希望提示!这是我的榜样:
import pandas as pd
# an example df (the real data makes more sense):
series_list = [
pd.Series(list("hello! hello!"), name='greeting'),
pd.Series(list("stackoverflow"), name='name'),
pd.Series(list("howsit going?"), name='question')
]
wide_df = pd.DataFrame(series_list)
创建像这样的df总是给我一个宽格式:
0 1 2 3 4 5 6 7 8 9 10 11 12
greeting h e l l o ! h e l l o !
name s t a c k o v e r f l o w
question h o w s i t g o i n g ?
但是,我希望pd.Series()
name=
属性成为列名称。
对我有用的是提到的df.unstack().unstack()
:
greeting name question
0 h s h
1 e t o
2 l a w
3 l c s
4 o k i
5 ! o t
6 v
7 h e g
8 e r o
9 l f i
10 l l n
11 o o g
12 ! w ?
但这肯定是笨重的,必须有更好的方法!
谢谢,祝你有个美好的一天:)
答案 0 :(得分:2)
使用T
wide_df.T
Out[1108]:
greeting name question
0 h s h
1 e t o
2 l a w
3 l c s
4 o k i
5 ! o t
6 v
7 h e g
8 e r o
9 l f i
10 l l n
11 o o g
12 ! w ?