添加两个DataFrame并排序列,前两个除外

时间:2016-11-10 10:16:26

标签: python pandas simplify

我想连接两个数据框,从两个列表中创建:

verify(mock).simpleMethod();
Resolving method verify
ResolutionTest.verify
Resolving method verify(mock).simpleMethod
Resolution failed

但是,我希望我的数字列以排序的顺序出现,并且想知道是否有一种比分割前两列更简单的方法,对剩余的数据帧进行排序并再次连接两列:

import pandas as pd
import numpy as np

header_1 = ['A', 'B', -1, 3, 5, 7]
data_1 = ['X', 'Y', 1, 2, 3, 4]
d = pd.DataFrame(np.array([data_1]), columns=header_1)

header_2 = ['A', 'B', -2, 4, 5, 6]
data_2 = ['X', 'Z', 1, 2, 3, 4]
e = pd.DataFrame(np.array([data_2]), columns=header_2)

f = pd.concat([d, e])

> f
   A  B   -1    3  5    7   -2    4    6
0  X  Y    1    2  3    4  NaN  NaN  NaN
0  X  Z  NaN  NaN  3  NaN    1    2    4

我已经考虑过多指数了,但是我已经在使用索引来获取其他东西(数据源行,这里没有显示),而且我担心三级多指数可能会让它变得更多对于稍后切片数据帧很复杂。

2 个答案:

答案 0 :(得分:1)

步骤:

将列设为系列表示,索引和值均等于索引键。

pd.to_numericerrors=coerce一起使用,以正确解析数值并将字符串值处理为Nans

在遇到这些值时,将Nans(之前是字符串值)推送到顶部,对这些值进行排序。

根据这些新返回的列标签获取相应的索引并重新排列DF

c = pd.to_numeric(f.columns.to_series(), errors='coerce').sort_values(na_position='first')
f[c.index]

Image

答案 1 :(得分:0)

您可能发现的问题是,由于混合strint类型,目前无法对连锁列进行排序,您可以将列过滤到{{1 }}和str类型,对numerical类型进行排序,然后使用新的列顺序对numerical进行排序,其中str类型在开头与排序的数字列连接:

reindex