質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

170閲覧

python dateframe操作

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/03 05:25

編集2019/06/03 05:59

df02を列毎に見ていった場合、
n0の前列にn0と反対の数を(0なら1なら0を)入れたいです。
n1の場合も、同様にして、
最終的に、32列を64列にしたいです。
試しに、nの列(n0 ~ n9)まででやってみたいと思い、他のデータフレームにダミー変数を追加していくという手法(mergeして)でやろうとしたところ、上手くいってくれないです。
どなたか、教えて頂けると幸いです。
よろしくお願いします。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

今ひとつ仕様が理解できていないのですが、01 で構成されたDataFrameの01
入れ替えたいのであれば

Python

1(~df.astype('bool')).astype('int')

で良いかと思います。
あとは上記の結果と元の DataFrameとを merge() して Index毎に並べ替える(sort_index())と良いのでは
ないでしょうか。

Python

1import pandas as pd 2 3df = pd.DataFrame([[1,0,0,0],[1,1,0,0],[1,0,1,0]], columns=['n0','n1','n2','n3']) 4print(df) 5# n0 n1 n2 n3 6#0 1 0 0 0 7#1 1 1 0 0 8#2 1 0 1 0 9 10ret = pd.concat((df, (~df.astype('bool')).astype('int'))).sort_index() 11print(ret) 12# n0 n1 n2 n3 13#0 1 0 0 0 14#0 0 1 1 1 15#1 1 1 0 0 16#1 0 0 1 1 17#2 1 0 1 0 18#2 0 1 0 1

【追記】

各行の間ではなく列の間ということで、修正しました。
Column名は同じ名前があると扱いが面倒なので、add_suffix()にてサフィックスを追加して、
ソートした際に意図した通りに並ぶようにしてあります。

Python

1import pandas as pd 2 3df = pd.DataFrame([[1,0,0,0],[1,1,0,0],[1,0,1,0]], columns=['n0','n1','n2','n3']) 4print(df) 5# n0 n1 n2 n3 6#0 1 0 0 0 7#1 1 1 0 0 8#2 1 0 1 0 9 10ret = pd.concat(((~df.astype('bool')).astype('int').add_suffix('_0'), df.add_suffix('_1')), axis=1) 11ret = ret.reindex(ret.columns.sort_values(), axis=1) 12# n0_0 n0_1 n1_0 n1_1 n2_0 n2_1 n3_0 n3_1 13#0 0 1 1 0 1 0 1 0 14#1 0 1 0 1 1 0 1 0 15#2 0 1 1 0 0 1 1 0

投稿2019/06/03 05:55

編集2019/06/03 06:39
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/03 06:04

解答して頂き、ありがとうございました。 すいませんでした。 行と列を間違えて記述してしまいました。 なので、 df_new = (~df.astype('bool')).astype('int') df としたとき、df_newとdfを交互にmergeしていきたいと考えています。 df_newの0列目を全体の0列目に、dfの0列目を全体の1列目に df_newの1列目を全体の2列目に、dfの1列目を全体の3列目に... といった具合に、64列欲しいです。 長々とすいません。
magichan

2019/06/03 06:40

回答に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問