Python 基于列名反转dataframe的列
我有一个数据帧:Python 基于列名反转dataframe的列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧: '1000' '0100' '0010' '0001' '1110' '1101' '1011' '0111' 0 0 1 2 3 4 5 6 7 1 00 11 22 33 44 55 66
'1000' '0100' '0010' '0001' '1110' '1101' '1011' '0111'
0 0 1 2 3 4 5 6 7
1 00 11 22 33 44 55 66 77
我想将其列名的1st和2nd字母颠倒的列以及3rd和4th原样颠倒
i、 e
第1列:1000→ 第二栏:0100
第三列:0010→ 第5列:1110
第四列:0001→ 第6列:1101
第7列:1011→ 第8列:0111
我想要一个这样的数据帧:
'0100' '1000' '1110' '1101' '0010' '0001' '1011' '0111'
0 1 0 4 5 2 3 7 6
1 11 00 44 55 22 33 77 66
这就是我对回归的看法:
reversed=''.join('1'如果x='0'或者'0'对于1stand2ndletter中的x)
在列表理解中使用函数,添加接下来的2个值,然后按子集中的原始顺序更改列的顺序:
df.columns = df.columns.str.strip("'")
cols = df.columns
df.columns = [''.join('1' if x == '0' else '0' for x in y[:2])+y[2:] for y in df.columns]
df = df[cols]
print (df)
1000 0100 0010 0001 1110 1101 1011 0111
0 1 0 4 5 2 3 7 6
1 11 0 44 55 22 33 77 66
编辑:更通用的解决方案是将值转换为由布尔值填充的二维numpy数组:
df.columns = df.columns.str.strip("'")
cols = df.columns
arr = np.array([[bool(int(y)) for y in x] for x in df.columns])
print (arr)
[[ True False False False]
[False True False False]
[False False True False]
[False False False True]
[ True True True False]
[ True True False True]
[ True False True True]
[False True True True]]
然后,对于反转使用索引,这里的:
表示所有行和列位置表单列表和~
反转掩码:
pos = [0, 2]
arr[:, pos] = ~arr[:, pos]
print (arr)
[[False False True False]
[ True True True False]
[ True False False False]
[ True False True True]
[False True False False]
[False True True True]
[False False False True]
[ True True False True]]
最后一次连接回字符串列表:
df.columns = [''.join(str(int(y)) for y in x) for x in arr]
print (df)
0010 1110 1000 1011 0100 0111 0001 1101
0 0 1 2 3 4 5 6 7
1 0 11 22 33 44 55 66 77
# df = df[cols]
我更喜欢使用df.rename,更“pythonic”: 如果要翻转1档和3档,类似地:
df = df.rename(columns = lambda x: x[2]+x[1]+x[0]+x[3])
非常感谢你!!!你知道如果我想把第一个和第三个倒过来,第二个和第四个倒过来会怎么样吗?@Δήμητραεωργγγγγγγγγ-给我一些时间@Δήμηητραεωωργγγγγ-答案被编辑了。@Δήμηηητττττταεγγγγγγγγγγγγγγ-然后在我的解决方案之后加上
df[cols]
,你说得对!我没有注意到!不客气!非常感谢你!这也行!
df = df.rename(columns = lambda x: x[2]+x[1]+x[0]+x[3])