我有一个叫做“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'值以我提取的相同顺序返回到新数据帧。有解决方案吗?
答案 0 :(得分:3)
使用.loc
指定所需的顺序。选择原始索引。
solution.loc[df.index]
或者,如果您信任每个组件中的索引值,那么
solution.sort_index()
设置
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
上的这些假设:
df
和x
。只需按索引订购结果:
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