今ひとつ仕様が理解できていないのですが、0
と1
で構成されたDataFrameの0
と1
を
入れ替えたいのであれば
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 06:04
2019/06/03 06:40