次のようなデータフレーム(totaldf)があります。
... Hom ... March Plans March Ships April Plans April Ships ...
0 CAD ... 12 5 4 13
1 USA ... 7 6 2 11
2 CAD ... 4 9 6 14
3 CAD ... 13 3 9 7
... ... ... ... ... ... ...
一年のすべての月の間。私はそれをしたい:
... Hom ... Month Plans Ships ...
0 CAD ... March 12 5
1 USA ... March 7 6
2 CAD ... March 4 9
3 CAD ... March 13 3
4 CAD ... April 4 13
5 USA ... April 2 11
6 CAD ... April 6 14
7 CAD ... April 9 7
... ... ... ... ... ...
文字列エントリを分割せずにこれを行う簡単な方法はありますか?私は遊んtotaldf.unstack()
だことがありますが、複数の列があるため、データフレームのインデックスを適切に再作成する方法がわかりません。
ドキュメントに記載されているように、pd.wide_to_long
権利をstubnames
取得するために少し余分な作業を加えて、を使用できます。
スタブ名。ワイドフォーマット変数は、スタブ名で始まると想定されています。
したがって、スタブ名が各列名の先頭にくるように、列名を少し変更する必要があります。
m = df.columns.str.contains('Plans|Ships')
cols = df.columns[m].str.split(' ')
df.columns.values[m] = [w+month for month, w in cols]
print(df)
Hom PlansMarch ShipsMarch PlansApril ShipsApril
0 CAD 12 5 4 13
1 USA 7 6 2 11
2 CAD 4 9 6 14
3 CAD 13 3 9 7
これで、使用pd.wide_to_long
し['Ships', 'Plans']
てスタブ名を使用して、必要な出力を取得できます。
((pd.wide_to_long(df.reset_index(), stubnames=['Ships', 'Plans'], i = 'index',
j = 'Month', suffix='\w+')).reset_index(drop=True, level=0)
.reset_index())
x Month Hom Ships Plans
0 March CAD 5 12
1 March USA 6 7
2 March CAD 9 4
3 March CAD 3 13
4 April CAD 13 4
5 April USA 11 2
6 April CAD 14 6
7 April CAD 7 9
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加