pyt*_*ist 257 python dataframe pandas
我有一个dataframe
超过200列.问题在于订单生成了
['Q1.3','Q6.1','Q1.2','Q1.1',......]
Run Code Online (Sandbox Code Playgroud)
我需要按如下方式重新排序列:
['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
Run Code Online (Sandbox Code Playgroud)
我有办法在Python中做到这一点吗?
Bre*_*arn 316
df = df.reindex(sorted(df.columns), axis=1)
Run Code Online (Sandbox Code Playgroud)
这假设对列名称进行排序将给出所需的顺序.如果您的列名不会按字典顺序排序(例如,如果您希望Q9.1列出现在Q9.1之后),则需要进行不同的排序,但这与pandas无关.
Wes*_*ney 294
你也可以做得更简洁:
df.sort_index(axis=1)
Run Code Online (Sandbox Code Playgroud)
确保将结果分配回来:
df = df.sort_index(axis=1)
Run Code Online (Sandbox Code Playgroud)
或者,就地执行:
df.sort_index(axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)
Ive*_*lin 32
你可以这样做:
df[sorted(df.columns)]
编辑:更短的是
df[sorted(df)]
Run Code Online (Sandbox Code Playgroud)
小智 19
Tweet的答案可以传递给BrenBarn上面的回答
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
Run Code Online (Sandbox Code Playgroud)
所以对于你的例子,说:
vals = randint(low=16, high=80, size=25).reshape(5,5)
cols = ['Q1.3', 'Q6.1', 'Q1.2', 'Q9.1', 'Q10.2']
data = DataFrame(vals, columns = cols)
Run Code Online (Sandbox Code Playgroud)
你得到:
data
Q1.3 Q6.1 Q1.2 Q9.1 Q10.2
0 73 29 63 51 72
1 61 29 32 68 57
2 36 49 76 18 37
3 63 61 51 30 31
4 36 66 71 24 77
Run Code Online (Sandbox Code Playgroud)
然后做:
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
Run Code Online (Sandbox Code Playgroud)
导致:
data
Q1.2 Q1.3 Q6.1 Q9.1 Q10.2
0 2 0 1 3 4
1 7 5 6 8 9
2 2 0 1 3 4
3 2 0 1 3 4
4 2 0 1 3 4
Run Code Online (Sandbox Code Playgroud)
bur*_*res 15
不要忘记将"inplace = True"添加到Wes的答案中或将结果设置为新的DataFrame.
df.sort_index(axis=1, inplace=True)
Run Code Online (Sandbox Code Playgroud)
小智 13
如果您需要任意序列而不是排序序列,您可以:
sequence = ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
your_dataframe = your_dataframe.reindex(columns=sequence)
Run Code Online (Sandbox Code Playgroud)
我在2.7.10中对此进行了测试,它对我有用.
Mye*_*Joo 11
对于多个列,您可以将列按顺序排列:
#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]
Run Code Online (Sandbox Code Playgroud)
此示例显示了排序和切片列:
d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
你得到:
col1 col2 col3 col4
1 4 7 17
2 5 8 18
3 6 9 19
Run Code Online (Sandbox Code Playgroud)
然后做:
df = df[['col3', 'col2', 'col1']]
Run Code Online (Sandbox Code Playgroud)
导致:
col3 col2 col1
7 4 1
8 5 2
9 6 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
210451 次 |
最近记录: |