熊猫 - 按栏排序

时间:2016-12-16 21:40:05

标签: python pandas

我有一个叫做“df”的pandas数据框:

  x y
0 1 2
1 2 4
2 3 8

我将它分成两个帧,然后尝试合并回来:

df_1 = df[df['x']==1]  
df_2 = df[df['x']!=1] 

我的目标是以相同的顺序恢复它,但是当我结束时,我得到以下内容:

frames = [df_1, df_2]
solution = pd.concat(frames)
solution.sort_values(by='x', inplace=False)

  x y
1 2 4
2 3 8
0 1 2

问题是我需要'x'值以我提取的相同顺序返回到新数据帧。有解决方案吗?

4 个答案:

答案 0 :(得分:3)

使用.loc指定所需的顺序。选择原始索引。

solution.loc[df.index]

或者,如果您信任每个组件中的索引值,那么

solution.sort_index()

enter image description here

设置

df = pd.DataFrame([[1, 2], [2, 4], [3, 8]], columns=['x', 'y'])

df_1 = df[df['x']==1]  
df_2 = df[df['x']!=1] 

frames = [df_1, df_2]
solution = pd.concat(frames)

答案 1 :(得分:0)

试试这个:

In [14]: pd.concat([df_1, df_2.sort_values('y')])
Out[14]:
   x  y
0  1  2
1  2  4
2  3  8

答案 2 :(得分:0)

使用时对解决方案进行排序 solution.sort_values(by='x', inplace=False) 你需要指定inplace = True。这会照顾它。

答案 3 :(得分:0)

基于eject上的这些假设:

  1. 必须订购列dfx
  2. 索引已订购。
  3. 只需按索引订购结果:

    y

    现在,df = pd.DataFrame({'x': [1, 2, 3], 'y': [2, 4, 8]}) df_1 = df[df['x']==1] df_2 = df[df['x']!=1] frames = [df_2, df_1] solution = pd.concat(frames).sort_index() 看起来像这样:

    solution