尝试将pandas DataFrames从宽格式转换为长格式。
我尝试使用melt()
,使用wide_to_long()
(简单的melt()
),但一直与语法和收到的输出混淆。
我还阅读了SO和Web上有关该主题的许多文章,并尝试了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 ?
但是这种确定是笨拙的,必须有更好的方法!
谢谢,祝你有美好的一天:)
最佳答案
使用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 ?
关于python - Pandas df转换:比df.unstack()。unstack()更好的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46413441/