2
データマングン質問:過度に幅の広いDataFrameから特定の変数を選択的にピボットできますか?Python pandas:ワイドフォームDataFrameで特定の変数をピボットする
df1 = pd.DataFrame(
[[1,'a','b',.1,-1,10],
[2,'a','b',.2,-3,12],
[3,'c','d',.3,-5,14]],
columns=['sample','id1','id2','x','y1','y2'])
print df1
# sample id1 id2 x y1 y2
#0 1 a b 0.1 -1 10
#1 2 a b 0.2 -3 12
#2 3 c d 0.3 -5 14
に:Xがコピーされていることを
# sample id position x y
#0 1 a 1 0.1 -1
#1 1 b 2 0.1 10
#2 2 a 1 0.2 -3
#3 2 b 2 0.2 12
#4 3 c 1 0.3 -5
#5 3 d 2 0.3 14
注、yは位置と整列
例えば、Iターンたいです。
ストレートpd.melt()
は、幅広い形式に簡単にピボットバックしない混合変数とデータ型を作成します。
print pd.melt(df1, id_vars='sample')
# sample variable value
#0 1 id1 a
#1 2 id1 a
#2 3 id1 c
#3 1 id2 b
#4 2 id2 b
#5 3 id2 d
#6 1 x 0.1
#7 2 x 0.2
#8 3 x 0.3
#9 1 y1 -1
#10 2 y1 -3
#11 3 y1 -5
#12 1 y2 10
#13 2 y2 12
#14 3 y2 14
アドバイスはありますか?ありがとう!
まず第一に、素晴らしい答えを。 df.columns.str.extract()は私にとって初めてのことですが、列名がもっと複雑な場合、例えば[''id1、f22'、 'id2、f22'、 'var50_a1'、 'var50_a2 '] '。適切なvar名/位置を抽出するためにregex-fuを使う必要がありますか? –
正規表現では、簡単にリストアップしたように正規表現の列を扱うことはできません。たとえば、 'a1、a2、b1、b2、c1、c2'や' var1_a1、var1_a2 、var2_a1、var2_a2'はどちらも良いはずですが、後者は混じらないので、正規表現は '([^ _] +)_([^ _] +)'でなければなりません。だからあなたのカラム名が狂っていないことを確認することが助けになるでしょう。 – Psidom
抽出する前に列の名前を変更するのに十分簡単で簡単です。 –