我想连接两个数据框,从两个列表中创建:
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
我已经考虑过多指数了,但是我已经在使用索引来获取其他东西(数据源行,这里没有显示),而且我担心三级多指数可能会让它变得更多对于稍后切片数据帧很复杂。
答案 0 :(得分:1)
步骤:
将列设为系列表示,索引和值均等于索引键。
将pd.to_numeric
与errors=coerce
一起使用,以正确解析数值并将字符串值处理为Nans
。
在遇到这些值时,将Nans
(之前是字符串值)推送到顶部,对这些值进行排序。
根据这些新返回的列标签获取相应的索引并重新排列DF
。
c = pd.to_numeric(f.columns.to_series(), errors='coerce').sort_values(na_position='first')
f[c.index]
答案 1 :(得分:0)
您可能发现的问题是,由于混合str
和int
类型,目前无法对连锁列进行排序,您可以将列过滤到{{1 }}和str
类型,对numerical
类型进行排序,然后使用新的列顺序对numerical
进行排序,其中str类型在开头与排序的数字列连接:
reindex